プログラミング

【プログラミング】美しいソースと汚ねぇソースの違いとは?【前編】

こんばんは、エリ狐です。

ITで仕事をしていると「美しいソース」、「美しくないソース」という言葉をよく聞きます。
今回はこれら「美しさ」についてまとめます。

雑誌のレイアウトには多くの考えが詰め込まれています。

段落の長さ、横幅、記事の順番、表紙などなど、優れた雑誌というのは、ページを飛ばして読めるようになっています。
また、順番に読めるようになっています。

優れたコードは「目に優しい」ものでなければなりません。
コードを読みやすくするための余白・配置・順序について説明します。

エリ狐式〜美しいソースの3ヶ条〜
  • ソースに一貫性を持たせる
  • 似ているコードは「シルエット」を似せる
  • 関連するコードをまとめてブロック化する

基本的にはこの3つなのです。

前編(この記事)では「美しいソースが必要なわけ」、「ソースの一貫性」、「シルエット」について説明していきます。

ちょっと量がボリューミーなので…
前編と後編に分けます!!
エリ狐
エリ狐

美しいソースが必要なわけ

そもそも美しいソースとそうじゃないソースって何?
そーなると思ったので、汚いソースと美しいソースを取り上げてみましょう!
エリ狐
エリ狐

■汚いソース例

■美しいソース例

これら2つを比較すると断然「美しいソース」の方が読みやすいですよね。

もちろん、このプログラムをあなたが再利用する場合においても、断然「美しいソース」を選択するでしょう。
このように、見た目が美しいコードの方が使いやすいのです。

したがって、さっさと流し読みができるようになれば、誰にとっても使いやすいコードだと言えます。

またプログラミングの時間は、コーディングする時間よりも「読む時間」が多いです。
そのため「ソースを理解するまでの時間」が短い方が作業が早く終わったり、間違いを少なくできます。

したがって、「美しいソース」を書くことはとても重要です。

一貫性のある記述について

ソースの一貫性は色々あります。

前半では「一貫性のある簡潔改行位置」についてみていきます。
ここでは、とある4つの引数があるコンストラクター(TestConnectionSimulator)を例に説明します。

  • 通信速度(Kbps)
  • 平均遅延時間(ms)
  • 遅延時間(ms)
  • ロス率

企業のアプリケーションの開発に携わると「コーディング規約」というものがあります。
そこでは1行幅の文字数が決まっていることが多く、横幅を合わせるために余計な改行を入れなければならない時が出てきます。

なんか「test_fiber」だけ浮いて見える…
うむ!
このように「浮いてる」ソースは美しくありません
つまり「イケてないソース」と言います。
エリ狐
エリ狐

最初の3ヶ条で述べた「似ているコードは「シルエット」を似せる」が守られていないので、一貫性を持たせるために適切な改行を入れる必要があります。

ついでにコメントも整列しよう!
エリ狐
エリ狐

■美しくしたソース

いかがでしょうか。
このように「シルエット」を意識することで、一貫性を持たせることができ、楽に目を通すことができます。

いや…でも縦に長いじゃん〜
しかも同じコメントが3回も繰り返されてるよ??
お!いいところに目がつきましたね〜!
そーいう場合には、仮引数コメントを書いて横にしちゃいましょう!!
エリ狐
エリ狐

コメントを上部に移動して仮引数を1行書くことで、数値の右コメントが不要となりました。

好みでどちらがいいか決めてください!
エリ狐
エリ狐

一貫性がないのなら「シルエット」を作れ!

このパターンは、第一声「う●こ」って言いたくなるほど…見た目が汚いですよね。
また、1行が長すぎて折り返されているところもあります。
そして「シルエット」はブサイクだし、何より一貫性がありません。

こ、これは…改行を入れればいいんかな?
正解!でも、「assert」や「err」などの文字の列が何度も登場して邪魔をしているよね?どうする?
エリ狐
エリ狐
ぐぬぬ…。
このコードを本当の意味で改善するには…
「シルエット」を作ってしまえ!!
ということです!
エリ狐
エリ狐
はぁ?
inputとoutputが同じ処理は1つの「メソッド」にまとめることができます!
エリ狐
エリ狐

■メソッド

なるほど!
これなら引数の異なる4つのテストがあることがよくわかるね!
「臭いものには蓋を」っていうように汚いものはまとめてることが重要!
エリ狐
エリ狐
散らかしたものを箱にそのまま入れる感じだね?
んーそ、そうだね←
エリ狐
エリ狐

この記事の目標はソースの「美しさ」についてでしたが、このように構造を改善することも重要です。
このように、コードの見た目を意識することで…

  • 重複行がなくなり、コードが簡潔になった
  • 試験する際に重要な部分(名前、エラー文字列)がみやすくなった
  • 試験パターンが減った
表面上の改善だけではなく、コードの構造も改善することができます!
エリ狐
エリ狐

次回はその他の「ソースの一貫性」についてまとめていきます。

前半部分のまとめ

  • 複数のコードブロックで類似処理があったら、シルエットも同じようにする
  • コード列を整理すれば、全体の概要がわかりやすくなる
  • コードの見た目を表面上を改善すると、構造も改善できる

誰でも美しいコードを見るのが好きです。
そのため一貫性を持たせることは素早く簡単に読むことができるので重要となります。
次回も引き続き美しいソースを書くための方法「関連するコードのブロック化」についてまとめていきます。

次回もお楽しみに!
エリ狐
エリ狐