《交互式程序设计 第2版》一2.7 作用域-阿里云开发者社区

开发者社区> 华章计算机> 正文

《交互式程序设计 第2版》一2.7 作用域

简介:
+关注继续查看

本节书摘来华章计算机《交互式程序设计 第2版》一书中的第2章 ,第2.7节,Joshua Noble 著 毛顺兵 张婷婷 陈宇 沈鑫 任灿江 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.7 作用域

作用域有时让人很讨厌,由它而起的问题通常难以定位。幸而要避免这样的问题其实还挺简单。
先看一段Processing代码:

void setup() { 

    if(true) 
    { 
        int i = 0; 
    } 
    i+=1; 
    print(i); 
}

我们在第3章会仔细讲Processing平台,现在你看不懂也没有关系,直接编译它。编译之后Processing的控制台窗口会弹出些有趣的消息:

Cannot find anything named "i"

找不到名为“i”的东西。怎么回事呢?作用域是程序代码的其中一段或一部分,在这个区域里,你可以访问和获取相应的数据等内容,而在作用域之外则无法访问和获取。图2-8表示了每个变量所属的作用域。
image

图2-8:一个函数里变量的作用域
一般的规律是,变量在最接近它的花括号内有效。例如在函数内定义了一个变量:

void someFunction() { 
    int anInt; 
}

anInt在函数内有效,右花括号就是它作用域结束的标志。变量如果是在语句内被定义的,比如

if(something) { 
    int anInt; 
} 
anInt = 5; // 错误!anInt在花括号之外就失效了

那么它只存在于语句之内,所以上面的这个anInt在if语句之外就失效了。为什么要规定作用域呢?简单说来就是为了让程序分清哪些东西在用,哪些东西没在用,这样运行起来会更加高效。只要记住括号定律就行了:如果变量出现之前有一个左花括号,那么这个变量作用域就是到对应的右花括号为止。
有些变量在整个程序里都有效,不会越出作用域。这类变量被称为“全局变量”。在Processing和Arduino里,全局变量在方法setup()的外面声明。在openFrameworks里情况有点不同,我们在后面专门讲openFrameworks的时候再来详细讨论。后面的章节分别讨论不同的编程语言,每一种语言对全局变量的处理都稍有不同,到时你会对全局变量有更深入的了解。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《Java 7程序设计入门经典》一2.5 变量的作用域和生命周期
本节书摘来自华章出版社《Java 7程序设计入门经典》一书中的第2章,第2.5节,作者(美)Herbert Schildt Dale Skrien,更多章节内容可以访问云栖社区“华章计算机”公众号查看
776 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10764 0
JS闭包以及作用域初探
    以前看到的一个问题,很有意思: for (var i = 0; i < 5; i++) { setTimeout(function () { console.
685 0
Linux c括号作用域【原创笔记】
大师指点后,所做的笔记,很感谢一起愿意研究技术的同事,以下不是本人原创,是他分析的成果#include #include struct lock_class_key { int ck; }; #define mutex_init() ...
708 0
JavaScript之作用域与变量
在javascript中声明变量时,我们经常使用的是 var 变量名=value; 例如: var =100; 可是你也许没有注意到这种声明变量的方式产生的变量是一个局部变量,而不是全局变量。
488 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载