̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2014/ 9/ 1 通巻669号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 連続した空行、空白、アンダースコアを禁止にするな - リーダブル・コード(26) 書き方のルールを作ると、同じように書式になって読みやすくなります。 しかし、 そのルールが例外を認めないために、表現できなくなってしまうことがあります。 副作用を考慮しないルールほど作業効率を落とすものはありません。 1つの文が2行以上になると、前後の行との間に空行を入れる方が見やすくなります。 1行の文が続くときは、空白を入れなくても見やすいのですが、 a = FuncA( c + d ); b = FunctionOfSingleLine( constant_x + d ); c = FuncC( c + d ); いくらインデントされていても、空行が入っていないより、 a = FuncA( c + d ); b = LongFunctionName( FunctionInArgument( constant_x + constant_b ) + FunctionInArgumentB() ); c = FuncC( c + d ); 入っていた方が読みやすくなります。 a = FuncA( c + d ); b = LongFunctionName( FunctionInArgument( constant_x + constant_b ) + FunctionInArgumentB() ); c = FuncC( c + d ); 逆に、1行の文が続くときに空行を入れると、空行が余計に見えてしまいます。 a = FuncA( c + d ); b = FunctionOfSingleLine( constant_x + d ); c = FuncC( c + d ); 空行には、複数の文から1つの処理を行う、ブロックの区切りを表現することが よくあります。 これは、上記のように文を分ける空行とレベルが異なるため、 2行以上の空行を入れるようにすると、レベルの違いが分かるようになります。 // Block 1 a = FuncA( c + d ); b = FunctionOfSingleLine( constant_x + d ); c = FuncC( c + d ); // Block 2 a = FuncA( c + d ); b = LongFunctionName( FunctionInArgument( constant_x + constant_b ) + FunctionInArgumentB() ); c = FuncC( c + d ); もし、空行は1行に統一すべきというルールを作ったとしましょう。 それは、 見出し(Microsoft Word の用語)のレベルを1つに統一しましょうと言って いるような乱暴な標準化です。 空白文字も状況によっては2つ以上並べる方が見やすくなります。 パスカル・ケースでは、語の区切りが大文字と小文字の違いによって識別できる ため、空白文字は1つだけでシンボルの区切りであることが明快です。 void Function( SampleType Argument1, SecondType Argument2 ); これがスネーク・ケースになると、アンダースコア文字と空白文字の識別が 難しくなるため、 void function( sample_type argument1, second_type argument2 ); 空白文字は2つ並べなければシンボルの区切りが明快になりません。 void function( sample_type argument1, second_type argument2 ); 間に演算子が入るときは、その演算子に区切りの効果があるため空白は1つ だけでも見にくくなりません。 sample_variable + sample_variable2 人間が読む英語の文章は単語の区切りが重要ですが、プログラミング言語では シンボルの区切りが重要です。 この違いがあるため、文章と同じ表現にすれば 読みやすくなるわけではありません。 それなのに、空白文字を1文字に統一すべきというルールを作ってしまうと、 シンボルの区切りが見にくくなってしまうのです。 パスカル・ケースでは、C言語でもクラス名とメンバー名を分けたいときに アンダースコアを入れると、そういった意図があることが読めるようになります。 SampleClass_MemberVariable スネーク・ケースでは、アンダースコアを2つ並べなければ、その意図がある ことが読めないどころか、その情報が失われることになってしまいます。 SAMPLE_CLASS_MEMBER_VARIABLE sample_class_member_variable アンダースコアを2つ並べたらクラス名とメンバー名などのレベルの違う区切り とすれば、そのような意図がコードから読めるようになります。 SAMPLE_CLASS__MEMBER_VARIABLE sample_class__member_variable それなのに、アンダースコアを2つ並べてはいけないというルールを作ってしまうと それが表現できなくなってしまいます。 また、キャメルケースではアンダースコア を入れてはいけないというルールもあり、迷惑です。 メールアドレスには、ピリオドを連続してはいけないというルール(RFC 5321、 5322)があります。アンダースコアを連続してはいけないというローカル ルール もよくあります。 おそらく、ピリオドが1つの場合と2つの場合で見分けが 難しいのに区別されるのが気に入らないのでしょう。 しかし、それは プロポーショナル フォントの問題ですし、アンダースコアは見分けがつきます。 むしろつけることが目的です。 アンダースコアから始まるシンボルは、コンパイラーが提供するシンボルとして 予約されているのですが、アンダースコアが1つのシンボルと2つのシンボルが あります。 1つか2つかによって意味の違いはありません。 しかし、その違いで スペルミス(数のミス)を経験したことは、コピー&ペーストがよく行われる 現在では、ほとんどありません。 ルールを作る人は、たいていプログラミングが詳しくない人たちです。 熟練者でなくても分かりやすくなるルールができるというメリットはあるでしょう。 しかし、そのようなメンバーだけで作ったルールは、知っているプログラミング パラダイムやユースケースが少ないため、言語仕様が貧弱な古いプログラミング 言語と同様に、的確な表現ができなくなってしまうのです。 なんとなくありえない だろうから不要でしょう、として禁止したルールほど迷惑なものはありません。 ルールをシンプルにするために例外を認めないルールも迷惑です。 また、慣れていないから読みにくいと感じることは、すぐに慣れるので、 ルールにするまでもありません。 熟練者ほど多くのスタイルを読めるはずですが、 自称熟練者ほど自分の考えを強制する傾向があり、残念なことです。 品質が均質化するというのも幻想です。 絶対に守らなければならないコーディング規約ではなく、守れないときは、 作成者(専門家)にしか分からなくてもメリットがあれば許し、 作成者がルールを知ってメリットを理解したら標準に合わせるという コーディング ガイドだけで、効果はかなりあります。 何より副作用がありません。 強制よりも周知が大事なのです。 注目ニュース 一覧 ◇ マイクロソフト、社内システムをAzureへ移行。ただし重要なデータはオンプレミスに残す予定。 http://www.publickey1.jp/blog/14/azure.html … クラウドにはやはり重要なデータを置くべきではない。 ◇ C++14の標準化が完了、Standard C++ Foundationが表明。 http://www.publickey1.jp/blog/14/c14standard_c_foundation.html … 二進数リテラルは、やはり 0b から始まる。 ◇ AMDと米MS、開発者向けのヘテロジニアスな C++ AMP言語を発表 http://news.mynavi.jp/news/2014/08/28/396/ … C++ AMP言語が無料に。 ◇ OpenBSD、Nginxをデフォルトから排除。 http://news.mynavi.jp/news/2014/08/28/394/ … GNU ライセンスから BSD ライセンスへ。 ◇ 情報セキュリティを軽々しくネタにするマスコミにモノ申す。 http://www.itmedia.co.jp/enterprise/articles/1408/22/news027.html … マスコミは自分の正義や都合が最優先。ジャーナリズムとして失格。 ◇ 患者450万人の個人情報流出、発端はOpenSSLの脆弱性だった。 http://www.itmedia.co.jp/enterprise/articles/1408/21/news039.html … 仮想プライベートネットワーク(VPN)は、やはり仮想。 ◇ アップルのサムスン製品販売差し止め請求、米連邦地裁が却下。 http://japan.cnet.com/news/business/35052975/ … アップルは、儲かっているから損害はない。ということは…。 ◇ キン肉マン続編、Web版のみで再開の舞台裏。原作者「最初は猛反対した」が。 http://www.itmedia.co.jp/news/articles/1408/22/news045.html … 電子書籍のメリットを生かす機会があった。 ソフトウェアデザイン館 Sage Plaisir 21 ホームページ >>> http://www.sage-p.com/ メルマガ >>> http://www.mag2.com/m/0000083983.html ブログ >>> http://blog.livedoor.jp/sage_p/ ツイッター >>> http://twitter.com/Ts_Neko ダウンロード >>> http://www.sage-p.com/freesoft.htm サポート掲示板 >>> http://www.sage-p.com/kg_ban09/z6037C8.cgi 東日本大震災 >>> http://www.sage-p.com/saigai.html メール >>> ts-neko◇sage-p.com ←◇を@に変えてください 緊急メールは件名に「うどんメール」を付けてください。 このメルマガの登録・解除 - http://www.mag2.com/m/0000083983.htm