zoukankan      html  css  js  c++  java
  • 《编写可读代码的艺术》第9章 变量可读性

        变量的草率运用会让代码更难理解

    1. 减少变量

        1)没有价值的临时变量

    1 now = datetime.datetime.now()
    2 root_message.last_view_time = now
    3 
    4 #上面的 now 没有拆分复杂的表达式;没有更多的澄清;只用了一次。因此是冗余的。
    5 root_message.last_view_time = datetime.datetime.now()

        2)减少中间结果

     1 var remove_one = function (array, value_to_remove) {
     2     var index_to_remove = null;
     3     for (var i = 0; i < array.length; i += 1) {
     4         if (array[i] === value_to_remove) {
     5             index_to_remove = i;
     6             break;
     7         }
     8     }
     9     if (index_to_remove !== null) {
    10         array.splice(index_to_remove, 1);
    11     }
    12 };
    13 
    14 //速战速决,移除index_to_remove 
    15 var remove_one = function (array, value_to_remove) {
    16     for (var i = 0; i < array.length; i += 1) {
    17         if (array[i] === value_to_remove) {
    18             array.splice(i, 1);
    19             return;
    20         }
    21     }
    22 };

        3)减少控制流变量

            微软的Eric Brechner曾说过,一个好的面试问题起码要涉及三个变量,这会强迫你努力思考。

            你希望你的同事在读你的代码时感觉就像你在面试他们吗?

     1 boolean done = false;
     2 while (/* condition 1 */ && !done) {
     3     if (/* condition 2 */) {
     4         done = true;
     5         continue;
     6     }
     7 }
     8 
     9 // 上面的done成为控制流变量,唯一的作用就是控制程序执行
    10 // 通常来说,可以通过更好的运用结构化编程来消除
    11 while (/* condition */) {
    12     if (/* condition 2 */) {
    13         break;
    14     }
    15 }

    2. 缩小变量作用域

         让你的变量对尽量少的代码行“可见”。这样可以有效减少读者同时需要考虑的变量个数。

        1)尽量使方法变成静态的,这相当于缩小函数的作用域

        2)把大类拆分成小类。这只有在这些小类相互独立时才有很好的效果。如果小类之间的成员还是需要相互访问,那什么目的也没达到。

        3)把大文件拆分成小文件,或者把大函数拆分成小函数也是同样的道理,即数据分离,缩小变量作用域。

    class LargeClass {
        string str_;
        void Method1() {
            str_ = ...;
            Method2();
        }
        void Method2() {
            // Uses str_
        }
        // Lots of other methods that don't use str_ ...
    };
    
    // 把str_“降格”为局部变量,更便于跟踪
    class LargeClass {
        void Method1() {
            string str = ...;
            Method2(str);
        }
        void Method2(string str) {
            // Uses str
        }
        // Now other methods can't see str.
    };

    3. C++中if 语句的作用域

     1 PaymentInfo* info = database.ReadPaymentInfo();
     2 if (info) {
     3     cout << "User paid: " << info->amount() << endl;
     4 }
     5 // Many more lines of code below ...
     6 
     7 // 如果info只在if中用到,实际上可以定义如下,if语句块之后,读者就不用记着info这个变量了
     8 if (PaymentInfo* info = database.ReadPaymentInfo()) {
     9     cout << "User paid: " << info->amount() << endl;
    10 }

    4. 把定义向下移

        原来的C语言要求所有的变量放在语句块顶端,这强迫读者思考这些变量,即使要到很久之后才会用到它们。

        C99和C++去掉了这个要求。

    5. 只写一次的变量更好

        “永久固定”的变量更容易思考,例如const修饰的常量。

  • 相关阅读:
    Bundle Adjustment
    BFL ekf imu and odom
    RNN
    深度学习的数学(笔记)
    BP 神经网络
    PCA
    SVM
    KNN
    Kmeans
    决策树
  • 原文地址:https://www.cnblogs.com/yyqng/p/14231503.html
Copyright © 2011-2022 走看看