ブログトップ 記事一覧 ログイン 無料ブログ開設

Kazzzの日記 このページをアンテナに追加 RSSフィード

2011-12-30

[][] コーディングルール必要悪

まだ学習を初めて1ヶ月も経たないが、Objective-Cは柔軟性、拡張性に富んだその素晴らしい機能と裏腹に、間違いやすくコーディングによるバグを内包しやすい言語とは思う。(それを上手く使うのもプログラマ仕事である)

特に衝撃を受けたのは、(メッセージ式を含んだ場合の)コンパイルの緩さである。

f:id:Kazzz:20111230185530p:image
ここでは故意タイポしているが"inits"というメソッドはNSDateFormatterクラスは勿論のこと、そのクラス階層のどこにもに無い。この状態でコンパイルすればJavaC#であれば間違い無くエラーだが、Objective-Cの場合コンパイルは成功する。

しかしこのまま実行するとランタイムで例外が発生するのだ。
f:id:Kazzz:20111230185531p:image
"NSInvalidArgumentException" "[NSDateFormatter inits]: unrecognized selector sent to instance〜"が発生している。

このようにコンパイル時にメッセージ式では型の厳密なチェックは行われない。親切なXcodeさんがいないとミスがあることすら判らないのである。


「言語が文化を既定する」ではないが、個人的には言語の仕様に沿ってコーディングする以上のルールは不要だと考えているし、それがプログラミングの道具としての言語の理想だと思っているが、このような言語を使ってプログラムを書く場合、読みやすくミスを起こしにくい一貫したコーディングルールは必要なのだなと思う。

このような場合、いきなりオレオレルールを作るのではなく、まずは先達の方々が作ったルールを参考にするのが常道だろう。
Coding Guidelines for Cocoa: Introduction to Coding Guidelines for Cocoa
Google Objective-Cスタイルガイド 日本語訳 | textdrop

両者とも非常に参考になるが、Googleの規約はどうしてインデントが2桁なのだろう。 これは4桁にしたい所。

iOS5ではARC(Automatic Reference Counting)が導入されたものの、未だにGCは使えない。これはこれで正しい見識だと思う。

dondon 2012/01/01 14:06 スティーブ・マコネルの著作の中にインデントの桁数とプログラムの間違いに関する調査があって、
人間の美的感覚としては、4桁のインデントが一番好まれるが、
プログラムの論理の把握と間違い発生率では2桁のインデントが最も優れていた。
と言うような記述があったように、記憶しています。
とはいえ、私も4桁で記述してますが。

KazzzKazzz 2012/01/04 19:59 donさん、ありがとうございます。

インデントが2桁か4桁か、というのは好みや慣れだと思っていたので、そのような分析があったとは知りませんでした。
Delphiを書いていた頃は2桁にしていたと思うんですけど、JavaやC#で4桁でばかり使っているうちに、それが当たり前になってしまいましたね。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Kazzz/20111230/p1