(provisional)

データサイエンティストになるためのあれこれ

【100回読み】リーダブルコード(#004)

どうも!
ryotaです!

「リーダブルコード」の100回読み、本日は4回目です!

いやー同じ本を4回も読むって今までなかったんじゃないですかねー。
教科書とか問題集とかそういったものを除いて。
さらっと自己新記録を更新したような気がします。

さて、リーダブルコードで書かれていることを意識しながら仕事をしているのですが、
「ちゃんとロジックを追いかけることができていますか?」
ということについて書いてみたいと思います。

プログラミングとはデータ構造とアルゴリズムの組み合わせである、
ということが基本にあるのですが、
自分のイメージした通りに、データを動かすことができているのか?
ということが大切なんですよね。

昨日、自分が書いたコードを見直していたときに発見したんですが、
不必要なループ処理があったんです。
しかも処理のボリュームとしては結構大きい。

ざっくり言うと、
ループi(エクセルの1行目~最終行)に対して
ループj(あるファイルの文字列を1つ目~最後までリストに格納する)ということをしていたわけです。

で、このループjの処理は
あるファイルの文字列を1つ目~最後までリストに格納する、ということなんですが、
毎回する必要はなくて、そのプログラムの中で1回すればいいはずのものなんですよね。

それやのにエクセルの行ごとにやってしまっている…

これは非常に無駄過ぎる。
なんでこんなことになったんやろ…
と思い返してみれば、
最初はエクセルの行数に対してループ処理をしていなかったんですね。
つまりループiを作っていなかった。
まず、エクセルの1行目だけで、イメージした処理ができるかどうかを試したんですよね。

なので、
・エクセルの1行目に対して
・リストをループ処理によって作る
という流れになった。

で、それがうまくいったので、
「じゃあエクセルを最終行まで実行させる」
という流れになり、そこをループさせることによって
・エクセル1行ごとにリストを作る
ということになってしまったわけです。


まぁ詳細設計をせずに作りながら考えているので起こり得ることだったと思うのですが、
この問題点としては

「ロジックの流れを頭の中でイメージできていない」

ということなんですよね。

もちろんひとつひとつ書き出しながら丁寧にやれば防ぐことができたかもしれませんが、
僕にはそれができておりませんでした…


リーダブルコードを読んでから
「全体を小さく分解する」
ということを学び、
分解する中で無駄なループを発見した、
というわけなんです。

大きなかたまりの中では気づけなかったんですよね。

で、かたまりを分解して小さくすると何がいいかって、
今回の様にロジックをしっかりイメージしながら追いかけることができる、
ということだと思うんです。

特にループ処理や、メソッドや関数などであっちこっち飛ぶ場合に、
かたまりが大きいとどこまで進んだかイメージしにくくなってしまうんですよね。

なので、特にプログラミング経験が浅いうちは、
行数が多くなってもいいのでわかりやすい単位で分割すること、
そしてそれを実行したときにどういった処理になるのか、
ロジックを把握しながら書くこと、
を意識するととても読みやすく動きもスムーズなプログラムになるんじゃないでしょうか。


ということで「分割+流れ把握」を意識しながら今後も書いていこうと思います。

ぜひ参考にしてみてください~!