JUnit4ではhamcrestライブラリーが統合されており、伝統的なassertEquals()を使った比較以外に汎用的なassertThat()が使えます。これを使うとより英語的に自然に読めるアサーションを記述できるとされています。しかし、Classクラス同士の比較ができないといった問題もありますし、そもそも日本人にとって便利なのかという疑問もわきます。
私のように昔からJUnitのコードを書くことが習慣となっていると、値の検証はassertEquals(期待値, 実際値)メソッドで行うというというのがずっと常識となっていました。しかし、4年ほど前にリリースされたJUnit4.4以降では、長年親しんできたassertEquals()に加えて、新しくassertThat()と呼ばれる別の検証メソッドが追加されています。この新しい検証メソッドについては、既にいくつかのサイトで説明されています。 http://journal.mycom.co.jp/articles/2007/07/20/junit1/index.html 林檎生活100: JUnit 4.4 の機能,assertThat と Assumptions,Theories について. hamcrestのMatcherメモ - 都元ダイスケ IT-PRESS hamcrest の Co
コードレビューの話をいくつか見かけた. (1, 2, 3) 私もはやりにのってなにか書いてみたい. といってもリンク先についてどうこう言う気はない. ふだんからぼんやり感じていることをテキストにしてみたい. コードレビューの様式 コードレビューのやりかたは色々ある. 話の背景をあきらかにすべく, まずは私が参加したり見聞きしたりしてきた方法を紹介したい. ただとりとめなく列挙しても見通しが悪いから, 方法を評価する軸を見立てておこう. コードの粒度: 一回のレビューでレビュアが目を通すコードの量はどのくらいだろう. プロジェクト全体? モジュール単位, 機能単位, それともクラス単位? 古典的なレビュー様式はこれら <論理的な単位> でレビューをすることが多い. 最近はブランチやコミットのような <ひとまとまりの変更> を単位とする方法に人気がある. Github の Pull Reque
メソッドを関数として呼び出す 実は、Objective-C のメソッドの実態は C 言語の関数と同じです。 普段は隠蔽されていますが、メソッドとは最初の引数に自分のクラスを参照するオブジェクトを受け取る関数なのです。 メソッドの実体が関数であるという事実は、C 言語との親和性が極めて高いことを意味してます。 ピュアな C 言語で記述されたライブラリから Objective-C のメソッドを呼び出したり、オブジェクトを利用することも無理な話ではないのです。 Objective-C のメソッドは、常に IMP 型であると定義されます。 IMP 型は、ヘッダファイルで次のように定義されています。 typedef id (*IMP)(id, SEL, ...); この定義からも分かるように、Objective-C で宣言されたすべてのメソッドは、暗黙的に id 型と SEL 型の引数を持ちます。
Cocoaの例外処理 多くの方の助けをいただいて、最初にかなり重い話題を扱うことができ、ほっとしています。さて、今回選んだテーマはまたもや、Objective-Cのみの話題で、Cocoaの例外処理です。 そもそも例外とは何か 例外とは、プログラムの実行において例外的に発生した事象であり、例外処理とは、その例外的な事象が起こった時にそれを捕まえて、適切な処理を施すことです。適切な処理というのは、エラーパネルの表示であったり、事象の無視であったり、プログラムの終了であったりと一概に言えませんが、そういう事象を捉えるという点に意味があります。ところで、例外的な事象にはプログラムで回避不可能なものと、回避可能なもの(JavaにおけるRuntimeExceptionがこれに相当)が存在します。ものの本によれば、前者は例外として捉えるべき意味があり、後者はむしろプログラムのバグであるということです。C
てぃーによるiPhone/Mac/Android/Windowsアプリ開発、ウェブサービス開発、 ツイッター分析、音楽・DTM、イラストなど創作活動の記録です。 ブログ名は「創造性:creativity」(クリエイティビティ)と「てぃー」から。 勉強内容、デジタル製品(デジモノ)、エンタメについても書いていきます。 前回に引き続き、アップル純正の「Objective-Cプログラミング言語」を使った勉強です。 http://developer.apple.com/jp/devcenter/ios/library/documentation/ObjC.pdf 目次は以下です(再掲)。 序 章 はじめに 第 1章 オブジェクト、クラス、メッセージ 第 2章 クラスの定義 第 3章 オブジェクトの割り当てと初期化 第 4章 プロトコル 第 5章 宣言済みプロパティ 第 6章 カテゴリと拡張 第 7
Objective-C 2.0で(instance)methodを書き換えたい. そんな時は,Objective-CのRuntime関数をいろいろ使えばできます. Objective-C 2.0なので,当然iPhoneでも動きます. method書き換えには,class_replaceMethodを使います. @interface HogeA : NSObject{ } @end @implementation HogeA -(void)print{ NSLog(@"Hoge A!"); } @end @interface HogeB : NSObject{ } @end @implementation HogeB -(void)print{ NSLog(@"Hoge B!"); } @end というクラス2個があるとして //#import <objc/runtime.h>が必要 H
みなさまおはこんばんちわ。@EijiShibutaniだよ。 最近赤毛にしたんだけど、この前テレビに出てたチェ・ホンマンの髪色とまったく同じで愕然としたよ。どんな罰ゲームだよ。チェ・ホンマンのバカ!! (もし、チェ・ホンマン大好きな人がこのブログ読んでたら謝 r ………るかボケェェ!) めっきり更新滞っておりましたが、自分忘備録も含めた久しぶりのiOS TIPSです。 NSDateを使って現在の日時を取得する方法は一般的なのですが、今回はそこからさらにつっこんで、年・月・日・分・秒と細かく取得する方法をご紹介しますよ。 とりあえず NSDate で現在の日時を取得してみる。 えっと説明めんどくさいんでこんな感じ。 - (void)viewDidLoad { [super viewDidLoad]; NSDate *date = [NSDate date]; NSLog(@"現在の日時 >
お断り 情報が古いです。更新の予定はありません 未だにストックされる方がいらっしゃいますが、古い情報です。ご自身で最新情報を確認してください。 一部はPopperToolsとしてライブラリを公開しています 以下古い内容 iOSアプリの開発にはjavascript/HTML5/CSSやRubyなど様々な言語が利用可能ですが、漢ならやっぱりObjective-Cネイティブでしょ! Objective-CはCの完全上位互換なので、Cで使える技の数々はもちろん利用可能です。 加えて動的にメソッドを追加できるカテゴリや、プロトコルorデリゲートなど便利な機能がたくさんあるので、ガンガン使って行きましょう! 以下私が普段使っているマクロ・カテゴリ・ライブラリをまとめます。 一部過去の投稿を焼き直したものですがどうかご容赦を>< /* デバッグログ用マクロ。 NSLog()の使いすぎは明らかなパフォーマ
2020-03-11追記: タイトルの「未だ」がいつなのかわかりづらいので「2012年現在」を追加しました。 バカバカしい話ですが、ソースコードをSubversionなどでバージョン管理しているにもかかわらず、未だ修正前をコメントアウトして残す習慣は残っているところも多々あります。こういうのです。 // 2012/08/15 irof 修正開始 // hoge = fuga(1); hoge = fuga(2); // 2012/08/15 irof 修正終了 見た事無い方は、そのまま見ないままで生きていかれることを切に願います。 コメントの修正がある場合 2012/07/21にあった、SCMBCでこんなツイートがありまして。 この時点でお見せしたのはこんな感じ。 // 2012/07/21 削除開始 // // 間違ったコメント // 2012/07/21 削除終了 someMethod
このところ立て続けにコードレビューについて話をする機会があったので 私が経験した最高のレビュー体制を簡単にまとめておこうと思います。 利点 何故必要か 何が嬉しいのか コスト うまく回すためには何が必要か 細かい運営方法 はっきり言って当たり前の事しか書きません。 私も当時は当たり前のことだと思っていましたから、特に気にもしていなかったのです。 ただ見聞するところによると、これをちゃんとやっているところはとても少ないようです。 ウォールストリート系のファンドでもろくにレビューしてないとかどういうことなんでしょう。 だから時々会社が吹っ飛ぶんですね… 結局は、ああだ、こうだ各論を言っても、ちゃんとやれるのか、それ一点に尽きてしまう話なのですが… 利点 レビューを何のためにするか、それはまず第一に自分達の書いているコードに潜在するバグによる損失をできるだけ少なくすることでしょう。 型システムや
単なるメモ書きです>< http://twitter.com/#!/akisutesama/status/83521489382555650 http://twitter.com/#!/akisutesama/status/83521729380626433ある一つのCore Dataのモデルを非同期的に複数箇所から更新するときは、たとえどんなに軽微な、プロパティ一つだけの、他からは触られない様な変更ですら、きちんとlockを取らないと危険ということがわかった。API実行クラスだけでは不十分であった。非同期であればロック必須。変更を行うコードブロックを渡して、内部で安全にロックして実行、必要に応じてロールバックや失敗通知も行える様にする仕組みを作ろうと思った。CoreDataのモデルオブジェクトの更新はただのsetterプロパティの使用だけで発生してしまうのでついつい忘れがちになるのですが
■失敗例1 UITableViewのcellを設定する部分で以下のようなコードを書きクラッシュした。 NSString *tag = (NSString *)[row objectForKey:@"tag"]; [cell.tag setText:tag]; return cell; ■失敗例2 nilの場合があるなと考えて以下のようにする。 NSString *tag = (NSString *)[row objectForKey:@"tag"]; if (tag == nil) { [cell.tag setText:@""]; } else { [cell.tag setText:tag]; } return cell; 残念ながらクラッシュは依然として起こる。 ■最終版 tagはNSNullであり以下の判定に修正。 NSString *tag = (NSString *)[row
October 24, 2010 NSDictionaryクラス ●概要 NSDictionaryクラスは、キーと値の不変な関連付けを管理するオブジェクトのプログラムインターフェイスを宣言します。 このクラスまたはサブクラスのNSMutableDictionaryは、任意のキーに関連付けられたデータを便利に且つ効率的に取得する場合に使用します。 (便宜上、厳密な特定のクラスメンバを除いて、これらのクラスのインスタンスを辞書(dictionary)と呼びます) 辞書のキーと値のペアをエントリと呼びます。 各エントリの構成は、キーとキーの値となるオブジェクトで一つのオブジェクトとして表されます。 辞書内でキーは固有のものになります。 一つの辞書の中で、(isEqual:で確認できる)同じキーが2つ存在してはいけません。 キーは(NSCopyingプロトコルに準拠している)任意のオブジェクトを指
JSON Framework を使って JSON をパースする方法です。まだ、JSON Framework をインストールしていない場合は、前回の JSON Framework の使い方(準備編)からやってみてください。 NSString *jsonData = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:url] encoding:NSUTF8StringEncoding error:nil]; if (jsonData == nil) { // error } else { NSDictionary* jsonItem = [jsonData JSONValue]; } 解析した結果は、NSDictionary と NSArray が混合しているので注意が必要です。JSON によっては最初に NSArray
NSIneger等のスカラ型とNSNumber型の変換についてまとめようとしたんだけど 調べてるうちにObjective-Cのint型とNSInteger型、32bitと64bitの関係について 気づいたら調べていたのでまずはそこからまとめておく。 以下、特に注意書きしていない限りは、Mac-OS-X 64bit向けにビルドした結果。 まずは、NSInteger型をint型にキャストせずに代入すると以下の警告が出る。 Implicit conversion loses integer precision: 'NSInteger'(aka 'long') to 'int' 警告の理由は、NSIntegerの持ちうる値が32bitか64bitかは処理系依存だから。 int型変数に値を代入する時はプログラマが明示的にint(32bit)と宣言する必要がある。 そして、NSIntegerはlong
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。 � ?쪪View in English �쪪Always switch to English JavaScript はマルチパラダイムの動的言語であり、型や演算子、標準組み込みオブジェクト、メソッドがあります。その構文は Java や C 言語に由来するので、それらの言語の多くの構造が JavaScript にも同様に適用できます。 JavaScript は、オブジェクトプロトタイプやクラスによるオブジェクト指向プログラミングに対応しています。また、JavaScript は関数型プログラミングもサポートします。関数が第一級オブジェクトであり、式から容易に作成し、他のオブジェクトと同じように受け渡しすることができます。 このページは、 JavaS
日付計算のうちよく使う可能性の高いものを紹介。 オフセット付きのNSDate生成 NSDate生成時に現在の時刻に指定秒のオフセットを加え、過去や未来の時刻を指定する。 NSDate* date; date = [NSDate dateWithTimeIntervalSinceNow:0.0f]; // 現在の時刻 NSLog(@"現在の時刻 -> %@", date); date = [NSDate dateWithTimeIntervalSinceNow:3*60]; // 3分後 NSLog(@"3分後 -> %@", date); date = [NSDate dateWithTimeIntervalSinceNow:3*60*60]; // 3時間後 NSLog(@"3時間後 -> %@", date); date = [NSDate dateWithTimeIntervalSi
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く