良いコードの為の3箇条 2


最近、色々と教えてもらった事から
自分なりに良いコード、スクリプトを書く上でのコツを考えてみた。
というか実感したのさ。

 

ここでいう良いコードとは以下の点が満たされているもの
と、前置きしよう。

・保守しやすい事
・後から見たときにすぐに読解出来る事
・バグが少ない事
・バグの原因が発見しやすい事
・程度の良い汎用性がある事

ect

他にも人によっては色々とあるだろが、
それもこれも全部含めて一言で言ってしまえば

要するにいいコードってのは
「お行儀がいい」事なんだ

 

で、我流で色々とやってくると「お行儀が悪い」わけだ。

世の中にはコーディングスタイルが言語ごとに
明確に宣言されているものもある。例えばpep8などなど。

確かにそれらを守ることも、
よいソースコードを書くための解決策だが
コーディングを守っているからといって
保守性が高いわけではない。

高度なスクリプトテクニックもあるが
それをつかったからといって、
いいコードになるとは限らない。

 

では、もっとシンプルに単純に
いいコードを書くためのコツを考える。

そこで出た答えが・・・

以下の3点を守ると
自然といいコードになっていく
(と思っている)

 

その3箇条は・・・

ネストは出来る限り浅くする
関数やメソッドは出来る限り行数を短くする
関数やメソッドは目的をシンプルに絞る

ここで、面白いなぁと思ったのは
この3点が実はお互い非常に深い関係を持っている事

機能をシンプルに絞ろうとすると、
自然と関数やメソッドの行数は短くなる。
行数を短くしようとすれば自然とネストは浅くなる。
ネストを浅くしようとすると目的は自然とシンプルに絞られる。

 

単純化した関数やメソッドをあたかも
機械を組み立てるがごとく使い分けていくと。
一つ一つの関数やメソッドはシンプルなのに
機構としてはとても複雑になる。

ソースコードやスクリプトは
「書く」のではなく「組み上げる」
といった方が正確なのかもしれない

くみ上げる面白さが、本当のスクリプティングの楽しみなのかも?

個人的に、これはバイクに
例えることが出来ると思う。

クラスは一つのアッセンブリ。

アッセンブリは、
シンプルな一つの目的を持っている
パーツ群で構成されている。

例えば、ブレーキアッセンブリ。

キャリパー、ピストン、パッキン、
ブレーキパッド、ネジ、マスターシリンダ、バネ
オイルホース、ピストンピンなどなど。

パーツは一つ一つの目的や機能は
ほぼ1つに限られている。

それらが、複雑に組み合わさり、
適切にチューニングされて初めて、
ブレーキの機能を発揮する。

こう例えると、
機能性が高いソースコードとは
優れたエンジニアリングされたマシンの様なもの
なのかもなぁ~~

いやはや奥が深い深い

つくづく

 

 

具体的にはホントに単純なんだわサ。

例えば・・・

{
    function doAnything(flag)
    {

        if (flag) {

            ~~Aの処理をする

        }

        try {

            for (var i in valueA) {

                ~~Bの処理をする

                for (var k in valueB) {

                    ~~Cの処理をする

                    for (var in valueC) {

                        ~~Dの処理をする

                        try {

                            if (valueC == something) {

                                ~~Eの処理をする

                                for (var val in something) {

                                    ~~Fの処理をする

                                    if (val) {

                                        var returnValue = val;

                                    }

                                }

                            }

                        }
                        catch (e) {

                            if (e == errorTypes) {

                                ~~Gの処理をする

                            }

                        }

                    }

                }

            }

        } catch (e) {

        }

        ~~Hの処理をする

        if (returnValue != bad) {

            return returnValue

        } else {

            ~~Iの処理をする

        }

    }
}

何が目的なのか?
何をしているのか?
結果はどうなるのか?

一目でパッと見ても分からん<(`^´)>
こんなコードは悪夢でしかない

その悪夢を生み出しているのは自分なわけだが・・・

だからこそ、先の3箇条が重要になってくるんだ。

 

いやはや、
考えれば考えるほど勉強になる。

 

どうでもいいけど、
なんだか、シンタックスハイライターが上手く働いていない・・・
こんどなおさないと・・・・

 

 


Leave a comment

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

2 thoughts on “良いコードの為の3箇条