コードをきれいに書こう

先日、大学の先輩にお声掛けいただいて新しい職場への転職が決まった。やったぜ…
もともと転職を目標に始めた勉強だったので、一つ成果(?)が出て大変うれしい。
嬉しすぎてAPEXのランクシリーズでプラチナ帯に突入するまで勉強をほっぽりだしてしまった。

が、そもそも未経験の領域で仕事をしていくので事前に勉強しておかないと死ぬ。絶対死ぬ。
ということで改めて勉強をしていこう。HTMLはどうしたっていうね。まあまあ、完璧主義も良くないからね。

これからしばらくはこちらの書籍をまとめながら「きれいなコードを書くぞ」という勉強をしていく。
www.oreilly.co.jp

今まで職場の人に育成(といってもC#の読み方も書き方も独学だったので何を教わったかは分からない)してもらっていたので
ちゃんと開発をするところでのコードの書き方にはめちゃくちゃ不安があるので、これでしっかり勉強していきたい。
導入もそこそこに始めていこう。

第一章 理解しやすいコード

導入の章なのでぱぱぱとまとめる。
「優れた」コードとはどういうものを指すのか。
結論を言うと「基準はいろいろあるが、他の人が最短時間で理解できること」つまり「読みやすい」ことだ。
これに比べたら「最小限の行数で書いてある」ことは二の次。
実際、現在の職場では古の時代に書かれたのであろうイミフコードをやまほど見た。
見る人が見れば「テクニカル!グッド!」てなるんかもしれんが、結果大多数の人にとって分かりづらくメンテナンスがしにくいなら意味はない。
まして未経験から配属された僕だ、改修案件では毎回解読に費やす工数が膨大だった。

コードを短くするのではなく、コードを理解するまでの時間を短くする

これが重要だ。この本では、他の人(未来の自分含む)にとって読みやすいコードを書くための考え方がたくさん書かれている。しっかりものにするぞ。

第二章 名前に情報を詰め込む

「名前は短いコメントだ」とこの章のはじめに書いてある。
抽象的で汎用性の高い命名は、応用が利くように思えても単純に情報が不足していることになる。つまり読みにくい。
そこで、下記のポイントに注意して命名せよということだ。

明確な単語を選ぶ
汎用的な名前を避ける(あるいは、使う状況を選ぶ)
抽象的な名前よりも具体的な名前を使う
接尾辞や接頭辞を使って情報を追加する
名前の長さを決める
名前のフォーマットで情報を伝える

一つずつ咀嚼していこう。

明確な単語を選ぶ

例えばGetPage()というメソッドがあったとする。
「ページってどこから取ってくるの?」「フォーマットは?」みたいな疑問が湧くので、もっと明確な単語を使うべきだ。
ネットからページを読み込むならDownloadPage()とした方が媒体が分かりやすい。

もう一つ例が載っている。
Size()というメソッドだ。これ実際めちゃくちゃ見た気がする。C++で。
何の大きさなんだよマジで。画像の大きさならHeight()だし文字の長さならLengthChar()とかにしてくれ。

とかく単語選びの際は「よく見るね」な単語だけでなく、類義語の中でどれを使うと分かりやすいかよく吟味すべきだ。

汎用的な名前を避ける(あるいは、使う状況を選ぶ)

tmpとかretvalとかね。何に使ってるのか1ミリも分からん。「一瞬しか使わんからどうでもいい」のか「コード全体からしたら意味が小さすぎるから適当につけた」のか。
return valueとか「戻り値」だからね。戻り値があるメソッドなんてめっちゃあるだろ。この戻り値は何なんだよ。

ということで、戻り値が足し算の結果ならsum_ExamScoreとかつかったほうがいいよねと。

一方で、よく基本情報とかに出てくる下記のような処理なら別に気を使わなくていい。

tmp = right;
right = left;
left = tmp;

これはtmpという変数の寿命(スコープ)がめちゃくちゃ小さいので、後からコードを読むときに一瞬で何のことか分かるからだ。
あくまでも「読みやすさ(解読時間の短さ)」がキモだ。目的と手段の逆転には重々注意しなくては・・・

今日はここまで

時間的に今日はここまで。
関係ないけど「ニック式英会話」っていうyoutubeチャンネルめっちゃおすすめです。