什么是类型安全(Type-safe)

类型安全意味着编译器在编译的时候会验证类型,如果你尝试将一个错误的类型分配给一个变量时,会抛出一个错误。

下面是一个例子:

// Fails, Trying to put an integer in a string
String one = 1;
// Also fails.
int foo = "bar";

这也适用于参数,因为你明确定义了参数类型,比如:

int AddTwoNumbers(int a, int b)
{
    return a + b;
}

如果我尝试这样调用:

int Sum = AddTwoNumbers(5, "5");

编译器会抛出一个异常,因为我传递了一个字符串“5”进去,但是函数要求传递一个整形。
在一些弱类型的语言中(如 JavaScript),我可以这么定义一个函数:

function AddTwoNumbers(a, b)
{
    return a + b;
}

如果我这样调用:

Sum = AddTwoNumbers(5, "5");

Javascript 自动将 5 转换成 “5” 并且返回 “55”。 这是由于 JavaScript 使用 + 号进行字符串连接。为了让它可以感知类型,你应该这么写:

function AddTwoNumbers(a, b)
{
    return Number(a) + Number(b);
}

或者这样:

function AddOnlyTwoNumbers(a, b)
{
    if (isNaN(a) || isNaN(b))
        return false;
    return Number(a) + Number(b);
}

如果我这样调用:

Sum = AddTwoNumbers(5, " dogs");

JavaScript 自动将 5 转换成 “5” 然后返回 “5 dogs”。

不是所有动态语言都像 JavaScript 一样宽容弱类型 (事实上动态语言不含蓄地暗示弱类型 (比如Python)),有一些会在进行无效类型转换时给你一个运行时错误(runtime error)

虽然它很方便,但很容易出错,只有通过debug你的程序才能确定错误。我还是比较喜欢编译器告诉我我的类型出错了。

原文地址:StackOverflow

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值