码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 《代码大全2》第10章 使用变量的一般事项


    目录

    前言

    10.1 数据认知

    10.2 轻松掌握变量定义

    10.2.1 隐式声明

    10.3 变量初始化原则

    10.4 作用域

    10.5 持续性

    10.6 绑定时间

    10.7 数据类型和控制结构之间的关系

    10.8 为变量指定单一用途

    核对表:使用数据的一般事项

    初始化变量

    使用数据的其他事项


    《Code_Complete_2》持续更新中......_@来杯咖啡的博客-CSDN博客这本书有意设计成使你既可以从头到尾阅读,也可以按主题阅读。1. 如果你想从头到尾阅读,那么你可以直接从第2章“用隐喻来更充分地理解软件开发”开始钻研。2. 如果你想学习特定的编程技巧,那么你可以从第6章“可以工作的类”开始,然后根据交叉引用的提示去寻找你感兴趣的主题。3. 如果你不确定哪种阅读方式更适合你,那么你可以从第3章3.2节“辦明你所从事的软件的类型”开始。.....................https://blog.csdn.net/qq_43783527/article/details/126275083

    前言

            我在本章中用“变量”一词同时指代对象和内置数据类型 (built-in data type),如整数和数组等。

    1. “数据类型”一词通常是指内置数据类型;
    2. 而“数据”一词则可能代表对象,也可能代表内置数据类型。

    10.1 数据认知

    略

    10.2 轻松掌握变量定义

            本节将会向你讲述如何加快变量定义的工作。创建变量的确占去了你很多时间,因此养成一个良好的习惯会为你在整个项目周期内省去很多时间和麻烦。

    10.2.1 隐式声明

            有些语言支持隐式变量声明。例如,当你在 Microsoft Visual Basic中使用一未声明变量的时候,编译器会自动为你声明该变量(取决于你的编译器设置)。隐式变量声明对于任何一种语言来说都是最具危险性的特性之一,因为编译器自动声明变量经常会让程序员赋值出现错误。

            那么,如果你使用的编程语言支持隐式声明该怎么办呢?下面给出一些建议。
            关闭隐式声名。有些编译器允许你把隐式声明功能关闭。比如你在 VisualBasic 里可以用 option Explicit 语句来强迫程序员在使用变量之前先做出声明。
            声明全部的变量。 在你引入一个新变量的时候对它做出声明,哪怕编译器不要求你一定要这样做。这样做虽然不会捕提所有的错误,但至少能发现其中的一部分。
            遵循某种命名规则。 对像 Num 和 No 这样的常见变量名后缀建立一套命名规则,从而确保在需要一个变量时不会写成两个。
            检查变量名。 使用编译器或第三方工具生成的交叉引用列表 (cross-reference,list)。很多编译器会把一个子程序内的全部变量都列:力你发现acct Num 和 acctNo。它们同时还会列出那些声明了但是还没有使用的变量。

    10.3 变量初始化原则

            下面给出一些避免产生初始化错误的建议:

            1、在声明变量的时候初始化。

            2、在靠近变量第一次使用的位置初始化它。 包括 Visual Basic 在内的一些语言不支持在声明变量的同时进行初始化。这就会导致出现下面这种编码风格,即多个变量的声明语句集中放在一个地方,它们的初始化语句集中放在另一个地方——这些语句离真正使用变量的语句都还很远。

    更好的做法是在尽可能靠近第一次使用变量的位置初始化该变量: 

            第二个示例在多个方面优于第一个。

    • 在第一个示例中,当使用 done 变量的代码开始执行的时候,done 很可能已经被修改了。即便你在第一次写这个程序的时候不会这样,后续的修改也可能会导致出现这样的错误。
    • 这种方法的另一个问题是,一旦把所有的初始化代码都放在一起,也可能会让人产生误解,认为所有这些变量都会在子程序中一直使用——而事实上 done 只是在后面才被用到。最后,随着对程序的不断修改(可能会这样,即使只是为了调试),一些循环可能会包含使用了 done 的代码,因此 done 就需要重新初始化。对于这种情况,第二个示例需要做的改动就会少很多。第一个示例中的代码更容易产生恼人的初始化错误。

            这是就近原则(Principle of Proximity) 的一个例子,即把相关的操作放在一起。这一原则也适用于让注释靠近它所描述的代码,让控制循环的代码靠近循环本身,以及把语句写成直线的代码等各个领域。

            3、理想情况下,在靠近第一次使用变量的位置声明和定义该变量。 声明指定了变量的类型,定义为变量指定特定的取值。在允许这样做的语言,如 C++和 Java中,变量应该在靠近第一次使用的位置进行声明和定义。在理想情况下,每个变量都应该在声明的同时被定义,如下所示:

    10.4 作用域

    略。

    10.5 持续性

    略。

    10.6 绑定时间

    略。

    10.7 数据类型和控制结构之间的关系

    略。

    10.8 为变量指定单一用途

    略。

    核对表:使用数据的一般事项

    初始化变量

    • 每一个子程序都检查其输入参数的正确性吗?
    • 变量声明位置靠近变量第一次使用的位置吗?
    • 尽可能地在声明变量的同时初始化变量吗?
    • 如果无法同时声明和初始化变量,有没有在靠近第一次使用变量的位置声明变量?
    • 计数器和累加器经过了适当的初始化吗?如果需要再一次使用,之前重新初始化了吗?
    • 适当地重新初始化“需要重复执行的代码里的变量”了吗?
    • 代码在通过编译器编译的时候是不是没有警告信息?(你启用了所有可用的警告选项了吗?)
    • 如果你用的语言允许隐式声明,你为由此可能引发的问题做好补偿措施了吗?

    使用数据的其他事项

    • 如果可能,所有变量都被定义为具有最小的作用域吗?
    • 各变量的引用点都尽可能集中在一起吗?对同一变量的两次相邻引用,或者变量的整个生命期都这样做了吗?
    • 控制结构符合数据类型吗?
    • 所有声明的变量都用到了吗?
    • 变量都在合适的时间绑定了吗?——也就是说,你有意识地在晚期绑定所带来的灵活性和增加的复杂度之间做出平衡了吗?
    • 每个变量都有且仅有一项用途吗?
    • 每个变量的含义都很明确且没有隐含含义吗?

  • 相关阅读:
    SpringCloud链路追踪SkyWalking-第二章-部署搭建及高可用
    从0构建神经网络(1)从感知机到神经网络
    【软件工程】山东大学软件工程复习提纲
    JS之instanceof方法手写
    【C++进阶之路】特殊类的设计
    第15章Linux之JavaEE定制篇-搭建JavaEE环境
    C++面试连环问-STL
    编译原理——自上而下分析与递归下降分析构造(笔记)
    晴空一“鹤”排“云”上:以数为翅的中国飞鹤
    MySQL数据库中MHA高可用的搭建以及原理详解
  • 原文地址:https://blog.csdn.net/qq_43783527/article/details/126653019
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号