̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2014/ 8/ 4 通巻667号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 処理内容を示していない関数名を禁止にするな - リーダブル・コード(25) 一般的に関数名は、使う側の視点に立ってトップダウンにどのような処理が 行われるかを表す名前にします。 注意しなければならないことは、 関数の定義内容を見て、ボトムアップにそのトピックを表す名前にしては いけないことです。 前者を 命名法Top、後者を 命名法Bot とします。 ちなみに、ユースケースを関数名にする命名法もあります。 多くの場合、命名法Top と 命名法Bot は同じ名前になりますが、次の関数は名前が 異なります。  ・複数の関数で共通する関数の一部を取り出した関数  ・処理の進み具合が状態遷移に対応している関数 下記の FuncA 関数と FuncB 関数があるとき、 void FuncA() {   Aを送信する();   Busyランプを点灯する();   ログに記録する(); } void FuncB() {   Bを送信する();   Busyランプを点灯する();   ログに記録する(); } 共通部分を FuncSub 関数に取り出すように改良すると、次のようになります。 void FuncA() {   Aを送信する();   FuncSub(); } void FuncB() {   Bを送信する();   FuncSub(); } void FuncSub() {   Busyランプを点灯する();   ログに記録する(); } 送信後の共通処理の関数は、命名法Top で付けられましたが、この方が変更に強く なります。 たとえば、ログに記録するのは Aを送信するときだけになったと すると、関数名を変えなくて済みます。 void FuncA() {   Aを送信する();   FuncSub();   ログに記録する(); } void FuncB() {   Bを送信する();   FuncSub(); } void FuncSub() {   Busyランプを点灯する(); } 共通処理の関数の仕様は共通の度合いによって変化するため、変更される可能性が 高く、関数がどのような処理をするかを仕様定義してしまうと仕様変更がよく発生 してしまいます。 このような共通処理の関数の仕様を文書に書くとしたら、定義である「共通処理」 といった説明になります。 それでは内容がわからないというクレームが付く ことが予想されるときは「(日付)の実装では、〜を処理します。」といった 書き方になります。 なぜなら、処理内容の変更がよく発生するからです。 このような共通処理は内部関数になります。 つまり、内部関数に適切な処理内容を 文書やコメントに付けない理由は、こういったことです。 処理の進み具合が状態遷移に対応している関数も、命名法Top で付け、 ステップ番号、または状態を関数名にします。 状態名を付けることで 分かりやすくなることもありますが、それぞれの番号に名前を付けるのが 難しいときはステップ番号にしても何の問題もありません。 たとえば、手順書を書くときに、番号付きの箇条書きのそれぞれに 名前を付けることはあまりしません。 void ThreadA_onStep1() {   応答処理A(); } void ThreadA_onStep2() {   応答処理X();   応答処理S(); } 応答処理が別の状態に分ける修正が必要になったときは、次のようになります。 void ThreadA_onStep1() {   応答処理A(); } void ThreadA_onStep2() {   応答処理X(); } void ThreadA_onStep3() {   応答処理S(); } もし、命名法Bot で付けると次のようになります。 こうすると、処理の順序が 分からなくなってしまいましたね。 void ThreadA_応答処理A() {   応答処理A(); } void ThreadA_応答処理X() {   応答処理X(); } void ThreadA_応答処理S() {   応答処理S(); } 順序が一直線ではないときは、Step1_a, Step1_b といったサブの章番号を 付けるような名前にするとよいでしょう。 この関数の仕様書は、定義である「ステップ1の処理」といった説明になります。 それでは内容がわからないというクレームが付く ことが予想されるときは「(日付)の実装では、〜を処理します。」といった 書き方になります。 なぜなら、処理内容の変更がよく発生するからです。 注目ニュース 一覧 ◇ Chromebook は本当に仕事で使えるのか。グーグル担当者に聞く。 http://japan.cnet.com/interview/35051574/ … オフラインで使うことができる。 ◇ アップル、iOS の 診断機能 について詳細を説明。バックドア組み込みの指摘受け。 http://japan.zdnet.com/security/analysis/35051279/ … 診断機能の説明はあったが、それ以外に使われる可能性は残っている。 ◇ YouTubeの音楽事業責任が退社へ。噂されるサブスクリプション式サービスへの道険しく。 http://japan.cnet.com/news/service/35051270/ … 広告主を大事にしてクリエイターを大事にしなかったからか。 ◇ アジャイル開発しようよ。良かれと思っての罪深さ。 http://builder.japan.zdnet.com/tool/35050879/ … ウォーターフォールとアジャイルのいいとこどりが必要では。EUPとか。 ◇ 海の家の音楽を完全禁止した逗子のビーチの海水浴客が1/6に大激減。 http://buzzap.jp/news/20140721-night-club-law37/ … 副作用が出てしまったルール。 ◇ 会社不許可ツールで社外とデータ共有、半数以上が経験。 http://cloud.watch.impress.co.jp/docs/news/20140801_660605.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