IT ニュース&コラム 2017/11/20 通巻751号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ■■ 関数の直後に空白を入れるな - リーダブル コード(47) ■■ 関数に引数を複数指定するときは、コンマの後に空白を入れるというコーディング ルールがよくあります。 一方で、すべての引数を囲む括弧の内側には空白を入れない というコーディング ルールがよくあります。 たとえば、以下のようなコードになります。 FuncA(parameter, parameter); このルールの場合、遠くから見ると、FuncA(parameter, の塊と parameter); の塊に 分かれているように見えると思います。 ( の文字から、関数名と第1引数が別のもの であることは明らかだ、という人もいますが、それはポスターなどにおける空間を 活用することで見やすくなることについて分かっていない人です。 私が推奨する書き方は、コンマの後に空白を2つ入れることと、括弧の内側に空白を 入れることです。 FuncA( parameter, parameter ); この書き方になれていない人は、空白が気になるでしょうが、慣れの問題です。 遠くから見ると、関数名、第1引数、第2引数に分かれていることが明白です。 なお、2つの空白については、「連続した空白を1つにまとめるな - リーダブル・ コード(36)」に、その効果の説明をしています。今回は2つの空白については 説明しません。 括弧の内側に空白を入れないルールは、一般の文書で補足を表現するときに括弧を 使うことから来ていると思います。 現に、MSワードのスペルチェックで、括弧の 外側に空白を入れるように要求されます。 おそらく、括弧は補足であるという意味 から、括弧の中にかかっているため、内側に近づけているのでしょう。 たとえば、以下のような文章では、括弧の内側に空白を入れないほうがいいでしょう。 The International Labour Organization (ILO) is a United Nations agency. しかし、プログラミング言語の関数における括弧は、第1引数と最終引数にかかって いるのではなく、関数にかかっています。 よく関数を表すために括弧だけ書きますよね。 FuncA() よって、括弧は関数名に寄せて、引数から離すほうが意味に合っているのです。 引数を囲む括弧の内側には空白を入れないというコーディング ルールを破ると ツールが警告するだけでなく、ツールが勝手に直してしまいます。 それに対抗する ために編み出されたのが、関数名の直後に空白を入れることです。 FuncA (parameter, parameter); この書き方でも、関数名、第1引数、第2引数に分かれていることが明白です。 これでも良さそうですが、この書き方はマクロ定義では使えません。 #define ADD_MACRO (parameter, parameter) ((parameter)+(parameter)) 上記の ADD_MACRO マクロは、引数を取りません。 なぜならマクロ名の後に 空白があるため、その空白より後がマクロの内容になってしまうからです。 また、関数の引数がないときでも、引数があるように見えてしまいます。 FuncA (); 空白があるために、関数名と括弧を分けて認識するからです。 もちろん () の 中に何もないことを読めば分かりますが、速読的に見たときは引数に相当する 何かがあると一瞬認識してしまって混乱してしまうのです。 また、関数名の後に空白があると、関数名なのに型名に見えてしまうことがあります。 UserType variable; FuncA (variable); 1行目は UserType 型の variable という名前の変数名を宣言しています。 その直後に関数呼び出しがあると、FuncA 型の変数宣言なのに、なぜ括弧が あるのだろうと迷います。 括弧の内側に空白を入れるために、いろいろ工夫をしているのですが、 どれも副作用があります。 つまり、諸悪の根源は、括弧の内側に空白を入れる ことなのです。 ■■ 注目ニュース 一覧 ■■ ◇ エンジニア視点で説明するメルカリ、情シスに求められる SRE という新たな役割。 http://www.atmarkit.co.jp/ait/articles/1710/31/news009.html … マイクロサービスアーキテクチャ。個人がミスしないことを前提に運用していくのは難しい。 ◇ iPhone X に毎日触って納得したこと。ホームボタン廃止は全く問題なし。 http://www.itmedia.co.jp/pcuser/articles/1711/04/news021.html … 一般的な Android より4倍も高い本体は、ブランド品。 ◇ ファイルレス攻撃が深刻化。ウイルス対策の見直しも。 https://japan.zdnet.com/article/35110549/ … ファイルをスキャンする方式では防げないファイルレス攻撃。 ◇ Twitter、青バッジのガイドライン変更で差別主義者のバッジを剥奪。 http://www.itmedia.co.jp/news/articles/1711/16/news055.html … 本人あるいは公式のものという定義を貫かないのは凄い。 ◇ Twitterがルール改訂、攻撃的な行為などを明確化。 https://japan.cnet.com/article/35109887/ … Twitter などの IT 企業がが裁判官になる。 ◇ 750台のRaspberry Piで構成された低価格スパコン。 https://pc.watch.impress.co.jp/docs/news/1091722.html … 日本の1台の値段から計算すると、約400万円。 ◇ Windows Movie Maker 詐欺に注意、Google検索で上位に表示。 http://news.mynavi.jp/news/2017/11/13/139/ … 商標だけの問題か、バイナリを改造したのか。 ◇ 中国メディアが指摘する日本は改ざん文化は本当か。 http://www.itmedia.co.jp/business/articles/1711/14/news033.html … 目標達成のためには手段を選ばない日本人。 ◇ インテルがAMDと提携、セミカスタムGPU搭載Coreプロセッサを開発。 https://japan.cnet.com/article/35109944/ … nVidia ではなく AMD を採用したインテル。 ◇ ソシャゲ不具合の原因、ソースコード開示して説明。詫びソースコードとは斬新、と話題に。 http://www.itmedia.co.jp/news/articles/1711/16/news100.html … ソースを見せても、そのソースが本物かどうかを疑うので無意味。 ◇ 表示速度が異常なWebサイト dev.to。その仕組みは。 http://www.itmedia.co.jp/news/articles/1711/15/news133.html … キャッシュサーバを分散配置。JavaScript も削除。 ■■ ソフトウェアデザイン館 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