これはなに
個人的に読みやすい(美しい)コードとは何かと考える機会があったので、個人の考えをまとめたものである
注意書き
あくまで読みやすいコードの話であって、良いコード,良い設計という話ではない
良いコードは自ずと読みやすいが、読みやすいコードが必ず良い状態になっているとは言えないからだ
読みやすいコードとは
読みやすいコードとはすなわち斜め読みがしやすいコードだと私は思う
コードは小説や今読んでいるこの記事のように文章の一つだ
しかしコードが他の文章と決定的に違うのは人間が読む順番通りに書かれておらず、
また人間が読む順番が決まってないという事だ
コードにわざわざページ番号は振られていないし、上から下に順番通りに書かれている訳ではない
大抵のプログラマはコードを読む時、適当なファイルを開いて上から読んだかと思えば下から上に戻るし、
途中で別のファイルを開いて並べて読む事もあるだろう
つまり何が言いたいのかというとコードとはそもそもが斜め読みをするような文章だと言うことだ
斜め読みがしやすいコードは読みやすい、それはある意味当然である
斜め読みしやすいコードとは
前章で読みやすいという事は、斜め読みしやすい事だと言ったが、
実際にどのようなコードが斜め読みしやすいか考えてみよう
適度に区切られたコード
最初にして一番大事な事だと思う
「適度に区切られた」というのは改行や字下げ、関数の切り分けなどとにかく全部の事だ
いずれも多すぎても、少なすぎても読みづらい
区切る単位が適切であれば、ざっくりその箇所の意味が分かれば
そこを読み飛ばす事ができ読みやすい
また適度に区切るにしてもその「適度」というのが分からないと区切る事は出来ない
私はその為の一番の指標として「意味」と意識すると良いと考える
ある関数の中でこの部分は代入処理、そしてここからはループ処理をする
それぞれ「意味」する事が違うから改行をする
if文の中と外では「意味」が違うので、字下げをする
ある「意味」をまとめるために関数にする
すべて「意味」をベースに考える事が出来る
ここでの「意味」が大き過ぎたり、捉え方を誤ると一気に読みづらいものになるのだ
一貫性のあるコード
改行や字下げの仕方違ったり、同じような処理なのに全く違う実装がされているコードは読みづらい
若干前の内容と被るが「意味」の大きさが不均一だったり、捉え方が場所によって違う
という風に考える事も出来るだろう
同じようなコードが一貫して同じ書き方をしているのであれば、
意味を類推して読み飛ばせるため、結果的に読みやすい
「意味」とは何なのか
ここで言う「意味」は、単に「この処理は何をするか」というような機能的説明ではない
もっと広い文脈で、そのコードがどういう意図を持って、どういう位置づけでそこにあるかという話だ
変数の初期化、ループ、条件分岐といった処理単位は、見た目は明確でも、どのような目的でそこにあるのか、
前後の流れと、どう関係しているのかが明確でなければ、その「意味」は読み取りにくい
最後に
この記事では、私なりに「読みやすいコードとは何か」について考えてきた
端的に言えば、「斜め読みがしやすいコード」であり、そのためにはコードが適切に区切られ、
「意味」単位で整理されている必要がある
またここでいう「意味」とは処理の内容そのものではなく、文脈の中での役割や位置づけのことだ
意味の塊が見えるからこそ、他人が斜め読みをしても違和感なく、理解出来る
読みやすいコードとはこのようなものだと思う
当然、何をもって「意味」とするか、この粒度や捉え方は人によって違う
だからこそ、自分の書くコードがどんな意味や構造を持っているかを、まずは自分自身が意識しておく必要がある
この記事が誰かにとって、自分のコードの「意味」について考えるきっかけになってくれれば幸いです