阅读笔记--静态检查

静态检查–摘要

避免错误。 静态检查通过在运行时捕获类型错误和其他错误来帮助提高安全性。

容易明白。 因为类型在代码中明确声明,所以有助于理解。

准备好进行更改。 静态检查可以通过识别需要串联更改的其他位置来更轻松地更改代码。例如,当您更改变量的名称或类型时,编译器会立即在使用该变量的所有位置显示错误,并提醒您也更新它们。

Hailstone Sequence(冰雹序列)

作为一个运行中的示例,我们将探索冰雹序列,其定义如下。与一些起始Ñ,序列中的下一个号码是N / 2,如果Ñ是偶数,或3N + 1如果Ñ为奇数。该序列在达到1时结束。以下是一些示例:

2,1 
3,10,5,16,8,4,2,1 
4,2,1 
2 Ñ,2 n-1个,...,4,2,1 
5,16,8,4,2, 1 
7,22,11,34,17,52,26,13,40,...?(此停止在哪里?)

计算 Hailstone


// Java
int n = 3;
while (n != 1) {
    System.out.println(n);
    if (n % 2 == 0) {
        n = n / 2;
    } else {
        n = 3 * n + 1;
    }
}
System.out.println(n);
# Python
n = 3
while n != 1:
    print(n)
    if n % 2 == 0:
        n = n / 2
    else:
        n = 3 * n + 1


print(n)

对比异同

类型

Java和python 对比异同。

静态类型

Java是一种静态类型的语言。所有变量的类型在编译时(程序运行之前)都是已知的,因此编译器也可以推导出所有表达式的类型。如果a和b声明为ints,则编译器得出的结论a+b是也是int。实际上,Eclipse环境是在编写代码时执行此操作的,因此在您仍在键入时,您会发现许多错误。

在像Python这样的动态类型语言中,这种检查将推迟到运行时(程序运行时)。

静态类型是一种特殊的静态检查,这意味着在编译时检查错误。错误是编程的祸根。本课程中的许多想法都是为了消除代码中的错误,而静态检查是我们所看到的第一个想法。静态类型可以防止大量的bug感染您的程序:确切地说,是由于对错误类型的参数执行操作而导致的bug。如果您编写的代码如下:

    "5" * "6"

尝试将两个字符串相乘,那么静态类型将在您仍在编程时捕获此错误,而不是等待执行期间到达该行。

静态检查,动态检查,没有检查

考虑一种语言可以提供的三种自动检查很有用:

静态检查:在程序运行之前会自动发现该错误。
动态检查:执行代码后会自动发现错误。
不检查:该语言根本无法帮助您找到错误。您必须自己注意,否则最终会得到错误的答案。
毋庸置疑,静态捕获错误要比动态捕获更好,而动态捕获总比根本不捕获要好。

以下是一些经验法则,您可以预期在每次这些错误中会遇到什么错误。

静态检查可以捕获:

语法错误,例如多余的标点符号或虚假单词。甚至像Python这样的动态类型语言也进行这种静态检查。如果您的Python程序出现缩进错误,则会在程序开始运行之前先进行查找。
错误的名称,例如Math.sine(2)。(正确的名称是sin。)
参数数量错误,例如Math.sin(30, 20)。
错误的参数类型,例如Math.sin(“30”)。
错误的返回类型,例如return “30”;从声明为返回的函数中返回int。
动态检查可以捕获:

非法参数值。例如,整数表达式x/y只有在y实际上为零时才是错误的。否则它会起作用。因此,在此表达式中,被零除不是静态错误,而是动态错误。
无法代表的返回值,即当特定的返回值无法在类型中表示时。
超出范围的索引,例如,在字符串上使用负数或太大的索引。
在null对象引用上调用方法(null类似于Python None)。
静态检查通常与类型有关,错误与变量具有的特定值无关。类型是一组值。静态类型保证变量将具有该集合中的某个值,但是直到运行时我们才确切知道它具有哪个值。因此,如果错误仅由某些值引起,例如被零除或超出范围的索引,则编译器将不会对此引发静态错误。

相比之下,动态检查往往涉及由特定值引起的错误。

数组和集合

区别:数组是不可变的,给定长度就不能更改;而集合中的列表是可以改变的。

参考文献
http://web.mit.edu/6.031/www/sp17/classes/01-static-checking/#methods

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值