綺麗なコードを書くための関数活用術4選

きれいなコードと聞いて、どんなものを思い浮かべるでしょうか? 誰が見てもわかりやすく、まとまっているというのが、きれいなコードと言われる1つの条件ではないでしょうか?

まず前提として、プログラムはチームで作ることが多く、メモなど説明も書きこむことが出来ます。 1人で作成することもありますが、基本はチームで、そのためほかの人が見てもどんな処理をしているのか大体わかるような説明やメモを書いておくことが大切です。

それを踏まえたうえでの注意点とメリット合計4つを紹介したいと思います。

むやみにグローバル変数を使わない

関数内に変数がある場合、関数内でのみ変数が参照され、関数外からは参照されません。 そのためまず最初に注意点から。

たとえば大学の試験の総得点を出す計算で、
講義が全10回で出席点が合計100点
筆記テストの点数が合計100点
出席点を20%、筆記テストの点を80%に圧縮して合わせた点数を試験の総得点とします。

出席数をx、筆記テストの点数をyとして、試験の総得点を計算すると
x*10*0.2+y*0.8 で表されます。

ここで、この計算を関数化していない場合にはこんなことが起こり得ます。

・Aさんの出席数、筆記テストの点数をx、yに代入
・Aさんの試験の総得点を計算
・Bさんの出席数、筆記テストの点数をx、yに代入
・Bさんの試験の総得点を計算 その後平均点を出したい場合、Aさんの出席数、筆記テストの点数だと思ってx、yを使用してしまう。

このように関数外で同じ変数名が使われると変数の値が意図せず上書きされてしまいます。 変数が関数内で宣言されていれば、ほかの関数内で使われている関数名と同じだったとしても別の変数と見なされるので変数の値は上書きされずに済みます。 また、変数がどこでどのように使われているかを全てチェックすることは困難なので関数内で宣言するようにしましょう。

記述を省略し、簡単にわかりやすく

ここからは、文章だけ見てもわかりづらいと思うので、ダチョウ倶楽部さんの鉄板ギャグ「どうぞどうぞ」を例に書いていきたいと思います。 まず、ダチョウ倶楽部さんの「どうぞどうぞ」の一連の流れはこんな感じです。

①ダチョウ俱楽部さんの中から1人が罰ゲームをやることになる
②上島さんがやらされそうになるが「おれはやりたくない」と嫌がる
③肥後さんが「じゃあ、おれがやるよ」と言って手を挙げる
④寺門さんが「じゃあ、おれが…」と言って手を挙げる
⑤共演者(いれば)が「じゃあ…」や「おれが…」「私が…」と各自言いながら手を挙げる
⑥それを見た上島さんが「じゃあ、おれがやるよ」と言って手を挙げる
⑦上島さんが手を挙げた瞬間、上島さん以外の手を挙げていた全員が「どうぞどうぞ」と言い掌を上にして、上島さんのほうに手を差し出す
⑧上島さんが怒る という①~⑧の行動を「どうぞどうぞ」という関数(作戦)名で呼ぶことにする。

上記のダチョウ俱楽部さんの例を見れば一目瞭然ですが、①~⑧まで書いていたものが「どうぞどうぞ」というたった6文字に省略できています。そしてそのやりとりを何度か使う場合は

・8行×使用回数分の非常に長いプログラムを書く必要があったものが
・「どうぞどうぞ」(6文字)×使用回数分と1/8以下に省略できます。

そうすることで非常に見やすくなります。また、入力する際も非常に楽になります。同じ処理が必要な場合はまた1からすべて書くのではなく、関数を呼び出せば良いのです。

チーム内の他の人が見てもわかりやすいように、何のための処理か、どういった処理かというメモを関数に限らず書くのですが、関数にして使いまわす場合は都度説明を書く必要がなくなります。何度も使う定番の処理は関数としてひとまとまりにしておくと、便利で見やすくなりますし、何度も使う場合は入力も楽になります。

わかりやすい関数名をつける

ダチョウ俱楽部さんの例だと、非常に知名度の高いギャグのため、「どうぞどうぞ」と言って理解できる人が多いですが、プログラム上でもやはりチームの人が何となく何をやっている関数なのか理解できそうな名前を付けることが大切です。

チームで作る場合、ほかの人が見ても理解できない場合があります。また自分だけで作る場合も、すぐ見返す場合は何と書いても覚えている場合が多いですが、数か月後・数年後見返すと自分で書いているプログラムでさえわからないことが多くあります。もちろん関数の中を見ると、1つ1つの処理は何をしているのかはわかりますが、一連の処理が何のためにやっているのかが理解できないことがあります。

例えば、ある一定の条件を満たしている人数を数える場合count○○といった名前を付けると、何かを数えている処理だろうと予想できます。また、得点を計算するならcalculate○○どちらか選ぶならchoose○○など、名前である程度チームのメンバーに理解できるようにしておきましょう。名前で説明しきれない部分はメモなど用いて記載することでどんな目的で処理しているのか共有しましょう。

関数を使い回す

使いやすい範囲でまとめるとは、関数に多くの処理を入れ、短くすっきりさせたら良いと聞こえるかもしれませんが、決してそうではありません。分かりやすくて、使いまわせる形にすることが重要です。

冒頭のダチョウ俱楽部さんの例で、⑤各自手を挙げるの部分で共演者によってかなりバラツキがあります。

アシスタントが女子アナだった場合は女子アナも手を挙げるのか、笑ってその様子を見ているのか?
大御所芸能人・番宣の俳優・女優・アイドルがいた場合はその件に参加するのか?

・芸人さんのみ
・司会者、アシスタント以外全員
・アシスタント以外全員
・大御所芸能人Aさん以外全員

など多くのパターンがあります。
そのため、①~④を使いまわせるようさらに細かい関数としてまとめましょう。

例えば、きれいな部屋とは、
・無駄なものが置いていない。
・何がどこにあるか把握できている。
・必要なものをすぐに取り出せる。 という点が重要なのではないでしょうか?

コードの場合も同様で、
・省略し簡単にまとめられるようにする(無駄な文字を書かない)
・わかりやすい関数名を付ける(何をする関数なのか理解しやすい)
・関数を使いまわせる範囲でまとめ、使いまわす(必要になったら必要な分何度でも使える)
ということが重要です。

加えて、意図せず上書きしてしまわないように
・グローバル変数はむやみに使わない
ことを注意すれば、一緒に作る人にも後から見直すときも、わかりやすいきれいなコードになるのではないでしょうか?

チームのみんなにはわかりやすいのか?自分が後で見直した時にわかりやすいのか?意識しながら、関数を最大限活用し、コードを書いてみてください!
それが、きれいなコードにつながるはずです!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です