こんにちは、きうちです。
桜もどんどん咲いて、すっかり春らしくなりましたね。
今年度から新たな世界へと進まれ、ドキドキワクワクな方も多くいらっしゃるかもしれません^^
そんな方も、「これまで通りだよ」という方も、どうか今年度もよろしくお願いします! m(_ _)m
★ ★ ★
少し前にSNSで、「きれいなコード」というワードを見かけました。
しかし、きれいなコードってなんだろう…?
「きれいなコード」の定義というか雰囲気は、人によって、またタイミングや状況によって変わってくると思います。
- 無駄な記述がない
- 芸術的なまでに短く記述されている
- 自分以外の人でもしっかり読める
などなど。
そんなことを考えていたら、「きれいなコード」というか「いいコード」について、自分の考えてきたことを振り返ってみたいなと思いました。
「動くだけで嬉しい」フェーズ
プログラムを始めた頃は…
とにかく入力したものが動くだけでうれしい。
エラーが出なくなり、動くだけでうれしい。
想定とはちょっと違う表示のされ方をして、それでもうれしい。
よくプログラムをお手本と見比べて、違いを発見して直してまた実行して、そしてうまく動いたらうれしい。
そんな感じでした。
そこに「良いコード」という概念はまだなかったですね。
「四角いコード」フェーズ
続けるうちに、
「マルチステートメントを利用して四角く書く」
ことがマイブームになりました。
ちなみに、私が生まれて初めて書いたコードは以下のようなものでした。
10 INPUT A
20 INPUT B
30 C=A+B
40 PRINT C
入力された数値2つを足し算して表示するものをBASICで書きました。これを、
10 INPUT A:INPUT B:C=A+B:PRINT C
という風に、区切り文字でつなげてなるべく一行に詰め込む。
当時使用していたパソコンは半角文字が横に80文字入る画面だったので、そのぎりぎりまで詰める。
上記の例だと一行で済んでしまいますが、少し長いプログラムだと四角くなっていくわけです。
当時はそれが美しく感じていたわけですが、処理のまとまりごとに分かれてくれないし、今思えば読みにくいですね。(笑)
「縦に長く」フェーズ
高校に進学してC言語と出会い、縦に長く書くのが、すなわち1命令1行で書くのが正しい(望ましい)ことを知りました。また同時期、先輩から「構造化を考慮すべき」ことを教わったりもしました。
「遮二無二」フェーズ
その後はそこまで「コードの書き方」を考えることもなく遮二無二コーディングする時がしばらく続きました。
あと、オブジェクト指向がよくわからなくて非オブジェクト指向言語ばかりだった時期でもありました。
Perl、Tcl/Tk、HSP、etc.、etc. …
「3つの性」フェーズ
IT業界に入って業界経験を積み、また他の方に教えたりもするようになって、行き着いたのが
「3つの性」
でした。すなわち
可読性
保守性
汎用性
の3つです。言い換えると
読みやすい
バグを作り込みにくい、改造しやすい
使いまわしやすい
ですね。
処理のまとまりごとに空行を空けるとか、メソッド化して部品化するとか、そのメソッドや変数の命名が読んだだけでなにか分かるように気をつけるとか、オブジェクト指向をなんとかうまいこと活かすとか。
そうしておくとワケのわからないバグで悩むことが減ったり、似たような処理が増えてもすぐ実装できたり、仕様変更に対応しやすくなったりしますね。
「待ちを広く」フェーズ
いくつもの現場を経験していると、「仕様がかたまらない」それどころか「仕様がゼンゼン出てこない」そんな現場に遭遇することもあります。
そこで必要になってきたのが「待ちの広いコーディング」。
「待ちが広い」という表現は麻雀由来だと思いますが、テトリスやぷよぷよなどのゲームでも用いられることがありますね。
将棋のように先を読み、「ここはこういう仕様変更があるかもしれないな?」「ここはこんな機能追加があるかもしれないな?」などと考え、どんな仕様がきてもあとから楽に追加できるようにする、というようなことです。
あまり冗長にしてしまうと、結局その部分は使わなかったりして、その部分が保守性に悪影響してしまう場合もあるかもしれず、難しいところですよね。
★ ★ ★
…なんだかとりとめのない文章になってしまいましたが、自分が普段思っていることを書き出してみました!これからも常に「どんなコードがいいのか?」を考えて行きたいと思います。
次はどんなコードがマイブームになるのか?そんなことを考えるのもワクワクしますね。