IT ニュース&コラム 2018/ 6/18 通巻765号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ■■ 関数の引数は、グローバルとローカルの両方のスタイルにする - リーダブル コード(51) ■■ 前回は、グローバルかローカルかを瞬時に分かるようにスタイルを分けると、 変数や関数の意味がすぐに調べられることを説明しました。 ところで、関数の引数は、グローバルでしょうか、それともローカルでしょうか。 ローカル変数(関数の中で宣言する自動変数)と同じく、引数は、関数に入ると作られて、 関数から返るとなくなることから、関数の引数はローカルであると考えられます。 しかし、それは物事の性質の一面しか見ていません。 関数の引数の意味を調べるときは、関数の定義や仕様書を見るために、グローバルに 検索します。 そう考えると、関数の引数は、グローバルであると考えられます。 関数(関数名)は、一般に、グローバルです。 ちなみに、C言語には、ファイル スコープの関数もありますが、それはまた別の機会に話します。 C#言語には、 ローカル関数もありますが、それはあまり使われないので、議論の対象から外させて いただきます。ちなみにローカル関数の意味を調べるときは、関数の中を検索するので、 ローカル関数はローカルです。 C++言語には、メンバー関数もありますが、 オブジェクトを経由すれば、どこからでも呼び出せ、メンバー関数の意味を調べる ときは、グローバルに検索するので、グローバルです。 クラスは、スコープを制限して いるのではなく、コンテキストを選択していると考えるべきでしょう。 関数の引数の意味を調べる行為を、もう少し厳密に見てみましょう。 まず、意味を 調べたい変数が関数の中にあったとします。 もし、それが関数の引数なら、ローカルに 検索する(関数定義の開始位置を検索する)ことが正解です。 しかし、引数であることが 分かった次は、関数のドキュメントを探すことになります。 なぜなら、引数の意味は 関数のドキュメントに書かれているからです。 関数のドキュメントには必ずといって いいほど関数プロトタイプ宣言が書いてありますが、その関数プロトタイプ宣言は、 一種の見出しです。 別のケースを考えてみましょう。 呼び出したい関数があり、その引数の意味から、 その引数に渡すコードを書きたいときについてです。 その場合、関数名で、 関数の定義や仕様書をグローバルに検索して、見つかった定義や仕様書に書かれた 引数の意味を読むことになります。 そこにも必ずといっていいほど関数プロトタイプ宣言 が書いてあります。 つまり、関数プロトタイプ宣言は、一般的な文章における見出しなのです。 また、関数の引数は、2面性を持っていると考えられます。   ・関数の中から引数を調べるときは、ローカルを検索する   ・関数の外から引数を調べるときは、グローバルを検索する 見出しには、英語固有のルールがあります。   ・英語のタイトルや見出しを書くとき、単語の頭は大文字にする。   ・ただし、前置詞など一部の単語の頭は小文字のままにする。 これは、キャピタライゼーション ルール (大文字・小文字のルール)です。 このルールのおかげで、それが見出しか本文かのどちらであるかが分かり、 理解の助けになります。 その見出しにおける動詞が関数名、主語や目的語などがクラス名や引数名に あたります。 どららも、単語の頭は大文字です。 ですので、関数プロトタイプ宣言 のスタイルは、単語の頭は大文字にするスタイルにするほうが、読みやすくなります。 Pascal ケースですね。 一方で本文は、単語の頭は小文字なので、Snake ケースですね。 しかし、関数の中から引数を調べるときは、ローカルを検索するようにしなければ、 意味をすぐに調べられなくなってしまいます。 そこで、キャピタライゼーション ルール の前置詞のように補助的な単語については小文字から始めるというルールに合わせる のがよいと思います。 関数の引数のドキュメントには、よく、入力であるか出力であるかが書かれています。 これを付けてみることにしましょう。 in_FilePath out_Result void FunctionA( char* in_FilePath, int* out_Result ); in と out は Snake ケースで、FilePath, Result は Pascal ケースです。 Snake ケースと Pascal ケースの間は、アンダースコアを入れた方が読みやすくなります。 なぜなら引数の意味に in を含めないようにしなけばなりません。 たとえば、in_FilePath がファイルパスの「中」を指定する引数であると読めてしまうのですが、 in_ が補助的な情報であることを Pascal ケースの前のアンダスコアから気づけることで、 ファイルパスを指定する引数であると(ファイルパスの中ではないことを)読むことが できるようになります。 関数の引数は、グローバルとローカルの両方のスタイルにすると、次のメリットがあります。 ・関数プロトタイプ宣言は、ほぼ大文字から始まる Pascal ケースに統一されて読みやすく、  意味を知るための情報がグローバルにあることが分かる ・関数の中から参照する引数名は、小文字から始まるため、  意味を知るための情報がローカルにあることが分かる このスタイルにしなければ、意味を知るための情報を知る手段を間違えることになり、 余計な作業にかなりの時間を取られることになります。 ■■ 注目ニュース 一覧 ■■ ◇ マイクロソフトのGitHub買収、開発者との関係強化へ布石、その狙いと展望。 https://japan.zdnet.com/article/35120376/ https://japan.zdnet.com/article/35120609/ https://www.publickey1.jp/blog/18/gitlab10github.html … コミュニティーから取り残されないための布石なので GNU を排除しないだろう。 ◇ Intelプロセッサに新たな脆弱性、投機的実行機能に関連。 http://www.itmedia.co.jp/enterprise/articles/1806/15/news079.html … Meltdown より悪用は難しく、月例パッチで対応可能。 ◇ ネット中立性規則、ついに撤廃。否両論続く。 https://japan.cnet.com/article/35120678/ … 忘れたころに格差が広がっていることだろう。しかし悪用される可能性もある。 ◇ タッチパッドが画面になる新型 ZenBook Pro、ASUSが発表。 https://japan.cnet.com/article/35120332/ … マウス派にとっては2画面に増えることになる。 ◇ MicrosoftがAlphabet(Google)を時価総額で3年ぶりに抜いたことの意味。 http://www.itmedia.co.jp/pcuser/articles/1806/11/news098.html … Windows の会社ではなく、会社のITのための会社へ。 ◇ 次期Docker for WinMac、GUIの数クリックで簡単にアプリケーションのコンテナ化と実行が可能に。 https://www.publickey1.jp/blog/18/docker_for_winmacguidockercon_2018.html … アプリケーション間の通信はネットワークに共通化するかも。 ◇ ビットコイン、この2カ月の最安値に。韓国でのハッキング事件を受け。 https://japan.cnet.com/article/35120681/ … ビットコインの信頼性は、ソーシャル エンジニアリング攻撃によって低くなる。 ■■ ソフトウェアデザイン館 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