ですがこのポカポカがまた曲者で、昼食後は椅子に座るなり即寝してしまい作業にならないため、この不毛な時間帯をなんとかできないかと考えた結果、ブログでも書こうかなと。
晴れてるなら買い物でも行けばいいじゃんという話ですが、横須賀は車社会なので休日は駐車場混むわ、どこも子供が阿鼻叫喚だわで、最近はすっかり休日に家から出ない子になりました。平日が快適すぎる。自営業バンザイ。
で、今日のお話ですが、週報に書いたとおりで今週はもう Android に触り始めてるのですが、この前まで触ってた Objective-C の覚え書きもまとめておきたかったので、忘れないうちにまとめです。
まずは素直に勉強しよう
- SDKで始めるiPad/iPhoneアプリ開発の勘所
-
以前も紹介したページです。まずは第3回くらいまで何も考えずに言われた通り打ち込んでみました。
何も考えずにと言っても、まあ一応プログラマなので、どのコードが何をやっているのかはだいたい想像つくのですが、Objective-C があまりにC言語とかけ離れ過ぎてて、疑問点が山のように積み上がります。が、まずは気にせず言われた通り打つべし打つべし。 - Objective-C入門
-
上の記事で開発の手順はだいたい分かったところで、保留にしていた Objective-C の疑問点の山をネットの力で掘り返していきます。ぐぐったらこのページが出てきたのでまずはここで。
サンプルを打ち込んでた時点で Objective-C での記述が C++ の何に対応するかは概ね見当がつくのですが、まずその答え合わせはできましたね。表記の違いはあれど、どちらもオブジェクト指向言語なので、やってる事は大して変わらなくて安心しました。
ただ、現在 MacOS / iOS で使われている Objective-C は機能が拡張されているのですが、その辺はこのページでは扱っていないので、@property とか @synthesize が何なのかとか、まだ謎が残ります。
なぜメンバにドット演算子?
最初にサンプルソースを打ち込んでいてものすごい違和感を感じたのは、クラスのインスタンスがポインタなのに、メンバに対してドット演算子 「.」 でアクセスする事です (C/C++ ではアロー演算子「->」を使います)。これはいったい何のつもりだとググってみたら、思いもよらず @property と @synthesize の謎まで解けちゃいました。世界は繋がっているのです。 要は、Java や C++ なら、メンバ変数にアクセスするために GetValue() / SetValue() といったメソッドを作っていたところを、@property とドット演算子を使えばコンパイラが暗黙でやってくれますよ、と、そういうことですか。
いや便利かもしんないけど、まぎらわしくね?
確かにアクセッサメソッドの実装は不毛な単純作業だし、いつも面倒だなと思ってましたが、隠蔽してるはずのメンバ変数が利用側のソースに出てくるのはどうにも気持ち悪い。たぶん自分では使わない予感。Objective-C を勉強してると、とにかくコーディングの手間を減らしたいんだろうなという意図を何度か感じましたが、そういう方針の言語なんですかね?
なぜ引数にラベルをつけたがるの?
C++ や Java から入った人が Objective-C に移行した場合、Objective-C ではメソッドの引数にラベル (引数の用途の説明) がつけられますよ、と言われても、面倒なだけでメリットが感じられないので省略したくなりますよね。それに、 「第一引数の前にある名前はメソッド名だ」 という思い込みがあるため、 「なんで1つ目の引数にはラベルがつけられないの?」 という疑問がわいたりするのですが、調べてみたら根本的に勘違いしてたんですね。 第一引数の前にあるのは 「メソッド名」 ではなく 「第一引数の説明」 だ と解釈したらやっと全てがしっくりきましたね。はじめからメソッド名なんてなかったんや!。ここで疑問を解決してなかったらこの先ずっとおかしな俺ルールでメソッドを作り続けるところだったよ。危ない危ない。
それにしても、なんでここまで体系が違う言語をCと組み合わせようと思ってしまったんですかね?。それが何よりも疑問。
といった感じで、15時くらいに書き始めたはずなのに結局即寝して、起きたら真っ暗じゃないですか!。ポカポカ時空恐るべし!
これだけ何も手が付かないとなると、諦めて散歩タイムにでもしますか。でももう少し暖かくなってからね。早く暖かくなりますように。