IT ニュース&コラム 2018/12/31 通巻779号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ■■ 空行の後は説明変数を積極的に使うこと - リーダブル コード(57) ■■ 今回紹介する方針も非常に重要です。 プログラムのコードが文書であり、 自然言語(英語や日本語)よりも厳密に表現できるという主張を通すときに、 副作用の問題をなくすために必要な方針です。 初心者や自称熟練者が書くプログラムのコードは、英文というよりは略語から なる文であるために読めないことが多いです。 また、動詞に勝手な意味を 付けてしまって後で読めないことも多くあります。 このような略語や専門用語は 自分やチームメンバーが理解できるので問題ないと判断してしまいますが、 それ以外の人はたとえ熟練者であっても理解できなくなります。 それでは 問題です。 だからといって、すべての変数名を分かりやすい英語で書いたとしても くどい文章に見えてしまうでしょう。 ときには略語や専門用語のほうが適切な 場合もあります。 ではどうすればいいかというと、変数名を分かりやすい英語にするケースと、 略語や専門用語にするケースであるかを見極めて使い分けることです。 変数名を分かりやすくn文字以上で書くというコーディング ルールや、 31文字以内で書くというコーディング ルールのどちらも、 片方だけの効果しか考えておらず、そのルールによって副作用を生むのです。 では、どのように見極めるのでしょうか。 それは、前回(リーダブル コード(56))で説明した、「読ませたい文(コード)」 については、説明変数を使って、英文として読めるようにすることです。 読ませたい文が関数呼び出しの場合、関数の引数に積極的に説明変数を 参照させるのです。 次のコード(Code1)は、どのような処理をしているか読めるでしょうか。 SetReadOnlyAttribute( master_file_path, true ); // Code1 マスターファイルに読み取り専用属性を設定していると読めますね。 では次のコード(Code2)は、どのような処理をしているか読めるでしょうか。 SetReadOnlyAttribute( ReplaceRootPath( path, work, master ), true ); // Code2 何かのパスのルートをワークからマスターに変えて、そのパスの読み取り 専用属性を設定していると読めますね。 ちょっとふわっとした理解になりました。 Code2 を書いた人なら、work が書いてあるから path がワーク ファイルの パスであり、その path からマスターファイルのパスに変えて、 マスターファイルを読み取り専用属性を設定すると理解できるでしょう。 しかし、他の人には、マスターのフォルダーには、おそらくマスターファイルが 入っているのだろうと推測して、それが正しいなら、マスターファイルに 読み取り専用属性を設定しているのだろうという条件付きの理解になります。 これがふわっとしていると感じる原因です。 Code2 は 1行だけで、マスターファイルのパスに変える方法についても書かれている ので効率的だと主張するかもしれませんが、その情報は初めて読むときには重要では ありません。 後述のようにコードを読む目的によっては不要な情報である可能性も あります。 では、パスを変える方法が必要な情報であるとして、Code2 と同じ処理になるように Code1 を変えてみましょう(Code1B)。 1: master_file_path = ReplaceRootPath( path, work, master ); 2: 3: SetReadOnlyAttribute( master_file_path, true ); 1行目に、master_file_path と path があることに少し違和感があることに気づく を思います。そこで、その違和感を取り除きましょう(Code1C)。 1: master_file_path = ReplaceRootPath( work_file_path, 2: work_folder_path, master_folder_path ); 3: 4: SetReadOnlyAttribute( master_file_path, true ); 前回(リーダブル コード(56))で説明したように、読ませたい文の前の行、 3行目は空行にしています。 つまりこのコードを読むときは、まず 4行目を読み、 もし、master_file_path の詳細を知りたいなら検索します(最新のテキスト エディターならクリックしただけで 1行目の master_file_path もハイライト 表示されます)。 もし master_file_path の詳細について知る必要がないなら 1行目を読む必要はなくなります。 一般的な読みやすい文書と同様に概要から詳細へという情報の階層化が実現されて いますね。 1行目の右辺については、説明変数を積極的には使わなくてもいいでしょう。 略語や専門用語を使ってもよい可能性が少し高いです。 なぜなら、左辺の説明変数があることで少し推測しやすくなっているからです。 たとえば、Code1B は、説明不足ではありますが、master_file_path という 説明変数があるために、少し推測しやすくなっています。 ただし、同じ単語の 変数が多くならない限り、推測しやすくならないことや、略語や専門用語を 定義するメリットはないので、基本的には説明変数を使いましょう。 説明変数とは。分かりやすい英語にした名前の変数です。 数学では変数を a, b, x のように1文字や数文字で表し、その内容は、 代入文も = の右側で説明していますが、 = の右側だけでなく左側でも 説明しています。 説明変数があることで、左辺と右辺に整合性が取れているか、 もしくは、取れていないかを判断しやすく、デバッグがしやすくなります。 数学の式は、多くの学者が検証済みですから、整合性の問題を考慮しなくても いいという違いがあります。 ■■ 注目ニュース 一覧 ■■ ◇ 世界で10万台のプリンタが乗っ取られたおそれ。著名YouTuberの支援メッセージを印刷。 https://japan.cnet.com/article/35130268/ … 目的が明かされないルールにのっとって粛々と排除すると反対派が団結する。 ◇ 大きな画面をどう使う?Amazon Echo Show を斬る。 http://www.itmedia.co.jp/news/articles/1812/29/news012.html … 画面付き音楽プレイヤー。ブラウザーも使えるけど、ゲーム機のオマケ程度。 ◇ アマゾンの掛け時計 Echo Wall Clock、米で発売。Alexa のタイマーをLED表示。 https://japan.cnet.com/article/35130218/ … 自分専用の部屋なら使えそう。 ◇ マイクロソフト、Windows Sandbox発表。デスクトップアプリを分離した環境で安全に実行可能に。 https://www.publickey1.jp/blog/18/windows_sandbox.html … 初期状態の Windows で動作確認することにも使えそう。 ◇ グーグル、お絵描きアプリ Canvas をリリース。Chrome などで利用可能。 https://japan.cnet.com/article/35130559/ … 難読化したコードで、Edge や Safari では動かないようにしてある。 ◇ GMO、仮想通貨マイニング事業で約355億円の特別損失。マイニングマシンからは撤退。 https://japan.cnet.com/article/35130614/ … 仮想通貨の下落による。 ◇ AIは永遠の春に入った。人工知能の権威、アンドリュー・ウ氏が語る。 https://japan.cnet.com/article/35130257/ … AIによって価値を生み出し、収益も出している。 次回の発行は、2019年 1月28日です。 ■■ ソフトウェアデザイン館 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