見出し画像

【PG初心者向け】わかりやすいプログラムを書くということ

はじめに

当たり前の話ではあるのですが、それぞれのやり方があり、どれが正解だなどというつもりではありません。
人それぞれの考えがありますので、これが正解だと言い切っているわけではありませんが、私が今の時点で良いと思っていることを書きます。
こういう考え方もあるよ、とか、こっちのほうがより良いんじゃない?みたいなことがあればコメントをいただけると嬉しいです。

なぜわかりやすいプログラムを書く必要があるか

プログラミングというのは、”作って完成したから終了!”というものではありません
人間誰だってミスはあるものですし、状況が変わって変更したい部分も出てくるはずです。

ミスが見つかったときや、一部変更したいとき、自分のプログラムが一体どこで何をしているのか、わからなかったらどうでしょう?
また1から作り直しますか?
必死に時間をかけて読み解いて修正しますか?
また、自分が作ったプログラムが自分の手を離れ、他の人に引き継ぐときは?
他の人はどうやってあなたのプログラムを理解すればよいのでしょうか。

こんなことが無いように、あるいは少しでもコストを低くするために、わかりやすいプログラムを書く必要があるわけです。
さらに、バグを出しにくくするためにも、この”わかりやすく書く”ことが大事になってきます。

独学で始めた人も多いはず

プログラミングを始めたいと思ったとき、どうするのでしょうか。
本業にしている(もしくはする予定の)場合は、専門学校に通って習うとか、大学で教えてもらったり、就職して先輩に教えてもらったりしていると思います。

しかし、本業ではない場合は、スクールに通う人もいるでしょうが、書店で本を探したり、ネットで情報を探したりする人も多いと思います。

自分なりに試行錯誤して、いろいろな人の情報をかき集めて進んで行かれるのでしょう。それはとてもよい経験だと思います。
しかし、同時に我流のプログラミングを身に着けてしまい、他の人に読めないプログラムを書いてしまっている可能性があります。
我流を身につけることが悪いことではありません。しかし、我流だとしても、わかりやすいプログラムを書く必要があることを知っておきましょう。

あなたしか直せない・作れないはいいこと?

たとえばあなたが組織内でとても優秀なプログラマーだったとします。

あなたが新規に配属されたチームで作られたプログラムがあなたからみてひどいものだったので、あなたはそれを一人で全部書き直しました。するとプログラムの効率がとてもあがり、機械の性能を今までよりもはるかに高く引き出すことができるようになりました。

ここまでは素晴らしいことです。しかし、もしあなたが書いたプログラム、チームの誰にもわからないものだったらどうでしょう。

今後そのプログラムの修正や、機能の追加などは、チーム内であなたしかできません。
あなたがチームを離れると同時に、そのプログラムのサポートは打ち切られてしまいます。

また、あなたが手がけたプログラムがあなた一人ではサポートしきれない数になってしまったとき、チームのメンバーは誰もあなたを支えることはできないわけです。

わかりやすいとは

さて、ここまでは”プログラムをわかりやすく書く”ことが大事だと述べてきました。
では、わかりやすくプログラム書くとはどいういうことでしょうか。

これはいろいろ議論されてて、やはり何がわかりやすいかというのは人によって違いますので明確な答えはありません
しかし、ガイドラインみたいなものもありますので、いくつか紹介致します。
これをベースに、自分なりに改善してみたり、他の人の考えを取り入れてみたり、自分なりのわかりやすいプログラムを作り上げていってください。

例えばこんなことに気をつけてみましょう。
インデントをしっかりと付けましょう。
変数名や関数名で、なんのためのものなのかわかるようにしましょう。
・プログラムの大きな流れと小さな流れをしっかりと設計しましょう。
作業の単位(ブロック)を作って、作業を見やすくしましょう。
コメント(メモ)を残して補足しましょう。

変数名や関数名

プログラミングでは変数や関数を使います。あなたのプログラムに出てくる変数はaやbやi、n、x、tmp、flgになっていませんか?
たとえば、短いプログラムのループにiが使われているのであれば、(通常、forループのループカウンタにはiが用いられることが多いため)わかりやすいと思います。
しかしこのプログラムが今後修正され、このループが長くなったときに、ループ内のiを見て「ああこれはループの回数が入っているんだな」とわかるでしょうか。
わかる程度の長さなら無駄に冗長な変数名をつけるよりも、iを用いたほうがわかりやすいでしょう。
しかし、わかりにくいと感じるのであれば、loop_indexとつけるだけでもわかりやすさは格段に上がります

できるだけわかりやすいように、変数や関数の命名にも気を配る様にしましょう。

キャメルケースとスネークケース

先程は変数名・関数名について述べましたが、これが複数の単語で名前がつけられる場合の話をします。
num of cups (コップの数)と名前をつけたいとします。しかし、プログラミングでは空白(スペース)を用いることはできません
そんなときに出てくるのが、このキャメルケーススネークケースです。
スネークケースで書く場合は空白の代わりにアンダーバーを入れます。
キャメルケースでは空白の次の一文字を大文字にします(全体の先頭は小文字)
スネークケース
 num_of_cups
キャメルケース
 numOfCups
各プログラミング言語でどちらかのケースが良く使われているというのがありますので、基本はそれに合わせて書くのが良いかと思います。

マジックナンバーと定数

変数名に続いて、今度はマジックナンバー定数についてお話します。
みなさんは閾値(しきい値)をご存知でしょうか。
何らかの境目になる値のことです。
たとえば点数が80以上で成績が成功となる場合は80が閾値なわけです。
この成績をつけるプログラムを作る場合、以下の様になります。

score = int( input() )
result = ""
if score >= 80:
    result = "success"
else:
    result = "failed"
print(result)

これだけ短いプログラムであれば、「80が閾値なんだな」とわかるかもしれませんが、長いプログラムになるとすぐには気づくことはできません
ですから、定数を作って、この80に名前を与えてわかりやすくしましょう。

PASSING_SCORE = 80
score = int( input() )
result = ""
if score >= PASSING_SCORE:
    result = "success"
else:
    result = "failed"
print(result)

こうすることで、”もしscoreがpassing_scoreよりも高かったら成功”なんだということが容易に読み取れるようになりました。

(なお、今回はPython3で例を書きましたが、Python3には定数そのものが実装されていません。ですが、Pythonですべてを大文字とアンダーバーのみで構成(アッパーケース)してある変数は定数とみなす、という慣習・共通認識がありますので、これを使いました。言語によって異なりますので、状況に応じて柔軟に対応してください。)

大きな流れと小さな流れ

プログラムの大きな流れと小さな流れを、しっかりと設計して書きましょう。事前にしっかりと設計して書くことで、あっちこっちに飛ぶような破茶滅茶なプログラムになることを防ぐことができます。
また、後々の拡張を考えたプログラムをつくるためにも、この大きな流れと小さな流れを整理することはとても重要です。
あなたが小学・中学のときに、作文を書く前に書きたい情報を整理してから書き始めましょうといわれた経験はないでしょうか。
書き出す前に大きな流れ(全体の言いたいこと)と小さな流れ(体験談やあなたの意見・考え)を整理して、書いていた、あの書き方。
プログラムも同じ様に大きな流れ(プログラムで達成したいこと)と小さな流れ(目的を達成するためにする一つ一つの処理)を整理して書きましょう。

作業の単位:ブロックを作る

プログラミング言語によってできることが違いますが、例えば関数をつくり、一連の作業を人まとまり・ブロックにすることで、わかりやすくなります。
わかりやすい本を想像してください。よく情報が整理された本であれば、「ああ、ここはこれの説明をしているんだな。」とわかり、自分のいらない情報であれば飛ばすことができますし、自分の知りたい情報が書いてある部分を見つけ出し読むことができると思います。
プログラムでもそういう読み方ができるように書くことが大切です。

コメント(メモ)を残す

プログラムの補足としてコメントは使いましょう。
コメントで説明すればいいからといって、中身を分かりづらいプログラムにするのであれば、コメントを書かずにわかりやすいプログラムを書くほうが良いです。
できるだけわかりやすくプログラムを書いたうえで、補足の情報などを、コメントで書くようにしましょう。

もっとレベルアップしたい方は

もっとレベルアップしたい方は、おすすめの本をご紹介致しますので、ぜひ読んでみてください。
期間を空けてもう一度読み直すごとに新たな気づきが得られる本だと思っております。

プリンシプルオブプログラミング
リーダブルコード
達人プログラマー 職人から名匠への道

最後に

ご質問・ご意見などあればコメント等くださればと思います😁また、スキ(下の♡マーク)を押して頂けると励みになります😊

この記事が気に入ったらサポートをしてみませんか?