綺麗なコードを書く7つの方法


もっと読む
綺麗なコードを書く7つの方法
まず、私は本論で述べたいのですが、純粋に美学の観点からコードを書きます.技術、論理などではありません.綺麗なコードを書くための7つの方法は以下の通りです.
1,if文を早く終わらせます.
例えば、以下のJavaScript文はとても怖いです.
1 function findShape(flags, point, attribute, list) {

2    if(!findShapePoints(flags, point, attribute)) {

3        if(!doFindShapePoints(flags, point, attribute)) {

4            if(!findInShape(flags, point, attribute)) {

5                if(!findFromGuide(flags,point) {

6                    if(list.count() > 0 && flags == 1) {

7                          doSomething();

8                    }

9                }

10            }

11       }

12    }   

13  }
でも、このように書くと、ずっと綺麗です.

1 function findShape(flags, point, attribute, list) {

2    if(findShapePoints(flags, point, attribute)) {

3        return;

4    }

5 

6    if(doFindShapePoints(flags, point, attribute)) {

7        return;

8    }

9 

10    if(findInShape(flags, point, attribute)) { 

11        return;

12    }

13 

14    if(findFromGuide(flags,point) {

15        return;

16    }

17 

18    if (!(list.count() > 0 && flags == 1)) {

19        return;

20    }

21 

22    doSomething();

23 

24 }
第二の表現はあまり好きではないかもしれませんが、if値に素早く戻るという考えが反映されています.不必要なelse陳述を避けるためにも理解できます.
2,単純なブール演算(論理演算)だけであれば、if文は使わないでください.
たとえば:

1 function isStringEmpty(str){

2    if(str === "") { 

3        return true;

4    }

5    else {

6        return false;

7    }

8 }
と書いてもいいです

1 function isStringEmpty(str){

2    return (str === "");

3 }
3、空白を使うなら、これは無料です.
たとえば:
1
 function getSomeAngle() {

2    // Some code here then

3    radAngle1 = Math.atan(slope(center, point1));

4    radAngle2 = Math.atan(slope(center, point2));

5    firstAngle = getStartAngle(radAngle1, point1, center);

6    secondAngle = getStartAngle(radAngle2, point2, center);

7    radAngle1 = degreesToRadians(firstAngle);

8    radAngle2 = degreesToRadians(secondAngle);

9    baseRadius = distance(point, center);

10    radius = baseRadius + (lines * y);

11    p1["x"] = roundValue(radius * Math.cos(radAngle1) + center["x"]);

12    p1["y"] = roundValue(radius * Math.sin(radAngle1) + center["y"]);

13    pt2["x"] = roundValue(radius * Math.cos(radAngle2) + center["y"]);

14    pt2["y"] = roundValue(radius * Math.sin(radAngle2) + center["y");

15    // Now some more code

16 }
多くの開発者がブランクを使いたくないです.これは有料です.ここでは意図的に空白を追加するのではなく、コードの一貫性を乱暴に遮断します.コードを実際に作成する過程で、どこに空白を入れるかを発見しやすくなります.これは美しくて分かりやすく、次のようになります.
1 function getSomeAngle() {

2    // Some code here then

3    radAngle1 = Math.atan(slope(center, point1));

4    radAngle2 = Math.atan(slope(center, point2));

5 

6    firstAngle = getStartAngle(radAngle1, point1, center);

7    secondAngle = getStartAngle(radAngle2, point2, center);

8 

9    radAngle1 = degreesToRadians(firstAngle);

10    radAngle2 = degreesToRadians(secondAngle);

11 

12    baseRadius = distance(point, center);

13    radius = baseRadius + (lines * y);

14 

15    p1["x"] = roundValue(radius * Math.cos(radAngle1) + center["x"]);

16    p1["y"] = roundValue(radius * Math.sin(radAngle1) + center["y"]);

17 

18    pt2["x"] = roundValue(radius * Math.cos(radAngle2) + center["y"]);

19    pt2["y"] = roundValue(radius * Math.sin(radAngle2) + center["y");

20    // Now some more code

21 }



4,          

         ,      。          。       ,            “students id”,       。

1 function existsStudent(id, list) {

2    for(i = 0; i < list.length; i++) {

3       student = list[i];

4 

5       // Get the student's id

6       thisId = student.getId();

7 

8       if(thisId === id) {

9           return true;

10       }

11    }

12    return false;   

13 }
5,ソースファイルに削除されたコードを残してはいけません.表示してもいいです.
バージョン制御を使用すれば、前のバージョンのコードを簡単に見つけることができます.もし他の人があなたのコードを大々的に読んでいたら、削除するコードであることが分かります.これは本当に恨みます.

//function thisReallyHandyFunction() {

//      someMagic();

//      someMoreMagic();

//      magicNumber = evenMoreMagic();

//      return magicNumber;

//}
6,長すぎるコードがないでください.
長いコードを見るのは大変です.特にコード自体の機能が小さいです.以下のとおりです

1 public static EnumMap getGroupCategoryDistribution(EnumMap sizes, int groups) {

2        EnumMap categoryGroupCounts = new EnumMap(Category.class);

3 

4        for(Category cat : Category.values()) {

5            categoryGroupCounts.put(cat, getCategoryDistribution(sizes.get(cat), groups));

6        }
同前
あえて70文字以内というわけではないですが、理想的な長さは120文字以内ということです.コードをインターネットに投稿すると、ユーザーが読むのは難しいです.
7,一つの機能(または関数内)にコード行が多すぎないようにしてください.
昔の同僚がVisual C++臭いと言っていましたが、関数内で10,000行以上のコードを持つことは許されません.コードの行数の上限がよく覚えていません.彼の言っていることが正しいかどうかは分かりませんが、彼の意見にはあまり賛成できません.もし一つの関数が50行を超えたら、どれぐらい大変ですか?知っていますか?また、ifループが延々と続いています.それに、マウスを転がして前と後ろのコードを合わせてください.私にとって35行以上のコードは理解するのが難しいです.私の提案はこの数字を超えると一つの関数コードを二つに分割することです.