プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

『Cocoa Programming For Mac OS X - Third Edition』 学習日記 その7

前回に続き、Cocoaプログラミングの学習メモを書いていきます。

Cocoa® Programming for Mac® OS X

Cocoa® Programming for Mac® OS X

今回はp52〜p57を学習…したはずなんですが、実はこのエントリー、下書きするのに1ヶ月以上空いてしまったので、学習成果を書けないんですよね〜。

まあ、そんなことばかり言って言い訳してもしょうがないので、学んだ(はずの)ことを一言で書いておきます。

【今回学習したこと】

  • initメソッドによる初期化には気をつけよう!
  • 何を気をつけるかって? そりゃー、新しい初期化メソッドを作るときだよー。詳細は省くけど、initWithEntryDateメソッドを仮に新しく作った場合、initメソッドの中身もいじっておかないと、初期化が正しく行われなくなるかもしれないから注意すること、だとさ。

適当な更新が続いているのに乗じて、今日の更新もこれまで!

『Cocoa Programming For Mac OS X - Third Edition』 学習日記 その6

前回に続き、今回もCocoaプログラミングの学習メモを書いていきます。

Cocoa® Programming for Mac® OS X

Cocoa® Programming for Mac® OS X

今日はp42〜p51まで学習を進め、本に記載されているソースコードを実際に写経するようにして打ち込んでコンパイル→実行という手順を踏みました。ソースコードをブログに記載するのは著作権的に大丈夫か自信が無いので、学習したことをいつものように箇条書きにしてまとめる形にします。

【新たに確認したこと】

  • NSObject, NSArray, NSMutableArrayなどよく使われるクラスのメソッドの機能を学習する。
  • Cocoaプログラミングにおいて、継承(inherits from)を多用するのは美しくない。compositionなどのデザインパターン(?)を駆使するなどして、クラスを「使う」(uses)ことがよい場合が多い。
  • 新しいクラスの作成方法、descriptionメソッドの使い方、高速列挙などを実際にコーディングして学び、使い方を覚える。

基本的にこの学習日記は「他人が見て分かるようには書いていない」ので、見てる人からしたらつまらないでしょうが、まあ、そこはご了承ください。一応、まだこのブログのタイトルは「プログラマ行進曲」なので、「プログラミング的なことも書いた方がいいよな〜」という保守的な思考が働いているだけです。

『Cocoa Programming For Mac OS X - Third Edition』 学習日記 その5

前回に続き、Cocoaプログラミングの学習メモを書いていきます。

Cocoa® Programming for Mac® OS X

Cocoa® Programming for Mac® OS X

最近書いたブログのエントリーがあまりに量が多くて重かったため、今回は軽く書いて終わりにします。今日はp41〜p42までなので、短くできると思います。

【新たに確認したこと】

  • isEqualメソッドは、メッセージが送られるクラスによって動作が変わる。例として、NSStringクラスの場合、"x == y" と"[x isEqual:y]"は意味が全く違う。前者はポインタの比較、後者はxとyが表現する文字列の比較となる。

…相変わらず、表現が正確じゃないなぁと思いますよ。

『Cocoa Programming For Mac OS X - Third Edition』 学習日記 その4

前回に続き、今日も軽くCocoaプログラミングの学習を行ったので、学習メモを書こうと思います。

Cocoa® Programming for Mac® OS X

Cocoa® Programming for Mac® OS X

今日はp33〜p40の範囲(Chapter3内)で学んだことを書いていきます。Chapter3はObjective-Cの章なので、Objective-Cの特徴が内容の中心になります。

【新たに確認したこと】

  1. Objective-Cは、C言語Smalltalk式のクラスとメッセージを送る仕組み(message-sending mechanisms)を加えて拡張した言語であること。
  2. インスタンスの生成にはallocメソッド、初期化にはinitメソッドを使う(←誤解を招く表現だなぁ…)。
  3. オブジェクトのZeroを示すのは"nil"である。nullと比較すること。
  4. Objective-Cの場合、オブジェクトの値がnilであっても、メッセージを送るコードを書いてコンパイルしてもエラーが出ない。(←これも誤解を招く、というか間違った表現かも)

とくに4点目のポイントはCocoaプログラミングにおいて重要な点であり、この点があるから「他の言語に比べてかなり柔軟で動的なポリモーフィズムを可能にし、」「Interface Builderを使ったインターフェイス構築が可能になる」とこの本を以前勉強したときに読んだ気がしますね。もしかしたら下の本に書いてあったのかもしれませんけど。

たのしいCocoaプログラミング[Leopard対応版]

たのしいCocoaプログラミング[Leopard対応版]

何にしろ、これからも学習を進めていきたいと思います。

『Cocoa Programming For Mac OS X - Third Edition』 学習日記 その3

前回の学習した範囲をもう一度読み直し、前回の記事では足りないと思われる所があったので、備忘録として書き残しておきます。

その前に一応、学習している本の紹介を。

Cocoa® Programming for Mac® OS X

Cocoa® Programming for Mac® OS X

前回は上の本のp27〜p28で学んだことを書きました。今回はその補足です。

【新たに確認したこと】

  1. 「awakeFromNibメソッドをオーバーライドする」という前回の表現は不適切かもしれない。
  2. 「アプリケーション起動直後」かつ「イベント発生の前」に、全てのオブジェクトは自動的に"awakeFromNib"メッセージを送る。
  3. 本を読んでいる限りでは、awakeFromNibメソッドがNSObjectクラス等で実装されているかどうかといったことについては書かれていない。単に「アプリケーションが起動したら全オブジェクトがawakeFromNibメッセージを送る → テキストフィールドの値を初期化(initialize)したいならawakeFromNibメソッドを実装すること」としか書かれていない(と思われる)。
  4. awakeFromNibは自動的に呼び出される(it gets called automatically)から、呼び出す(call)必要はない。アプリケーションを起動して実行すれば良いだけ。
  5. Cocoaでは、awakeFromNibのように、自動的に呼び出されるものがたくさんある。

こんなところでしょうか。多分ここで出た疑問点のいくつかは本を読んでいくうちに解決するものもあるとは思います。

…それにしてもawakeFromNibのことだけなのに、分量多くなってしまった…

(追記)
実際にp29に書かれているコードを自分で書いてみてコンパイル→実行してみて思ったけど、やっぱりawakeFromNibメソッドはNSObjectクラスとかに定義されているんじゃないかなと思った。Javaでいうinterfaceのメソッドみたいに、実装が全くない状態でawakeFromNibメソッドが定義されているんじゃなかろうかね。誰か知っている方がいましたら、コメントに書いてもらえると嬉しいです。

『Cocoa Programming For Mac OS X - Third Edition』 学習日記 その2

前回に続き、今日も軽くCocoaプログラミングの勉強をしたので、軽く今日の成果と言うか、勉強のメモを書きます。

Cocoa® Programming for Mac® OS X

Cocoa® Programming for Mac® OS X

上の本のp27〜p28を軽く読んで勉強したこと

  • アプリケーション起動時にテキストフィールドなどに初期値を設定したいときは、awakeFromNibメソッドをオーバーライドすること

…正しい表現なのかは自信無いですね。ただ、awakeFromNibメソッドのことを忘れていたら、自作のプログラムを作ろうとしたときに「初期値が設定できない!」と困った記憶があるので、重要な事項だと思います。まあ、「イベントが起こる基本や仕組みを知っていれば、忘れねーよ」と知人に言われましたけどね。

『Cocoa Programming For Mac OS X - Third Edition』 学習日記 その1

以前こんなことを書いたので、勉強しているアリバイ作り&プログラミング学習のモチベーション維持に下の写真を掲げます。

Foo.h — RandomApp2

Cocoaプログラミングの勘所を全て忘れてしまったので、潔く最初から学び直してます。上の写真は19pまでの学習してコードを書いた場面です。といってもまるっきり写経しただけですけどね(笑)

XcodeとInterface Builderの連携の仕方や、actionとoutletを感覚的に理解して使えるようにすることなど、やることはまだまだ多そうです。