You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求推荐Dart空安全学习资源,解析!运算符作用

Dart空安全问题解析与学习资源

一、!运算符的作用与你的代码问题

你的原始代码报错,核心原因是stdin.readLineSync()的返回类型是String?——这意味着它可能返回null(比如输入流意外终止时)。而int.parse()要求传入的参数必须是非null的String,直接把String?类型的str_age传进去,Dart的空安全检查就会触发错误。

添加!运算符后,stdin.readLineSync()!的含义是:你向Dart编译器保证这个表达式的结果绝对不是null,编译器会把String?强制转换为String,这样int.parse()就能正常接收参数,代码也就可以运行了。

但要注意:如果运行时这个表达式真的返回了null(比如特殊输入场景),程序会直接抛出NullPointerException,所以!是一种“断言式”的非空处理,只适合你能100%确定值不为null的场景。

更健壮的写法可以用条件判断处理null和非法输入情况,比如:

import 'dart:io';

void main() {
  var name = stdin.readLineSync();
  var str_age = stdin.readLineSync();

  if (name != null && str_age != null) {
    try {
      int age = int.parse(str_age);
      var ageToHundred = 100 - age;
      print("Hello $name you have $ageToHundred years to get to 100");
    } catch (e) {
      print("请输入有效的数字年龄");
    }
  } else {
    print("请输入完整的姓名和年龄");
  }
}

二、Dart空安全学习资源

  • 官方文档:Dart官方文档中的“空安全”章节,详细讲解了空安全的核心概念、?和!的用法、可空类型与非空类型的区别,是最权威的学习资料。
  • 官方视频教程:Dart官方团队发布的空安全入门系列视频,通过实际代码演示讲解空安全的使用场景和最佳实践。
  • 技术博客专栏:很多技术博主会分享Dart空安全的实战总结,比如空安全在Flutter项目中的应用、常见坑点解析等,适合结合案例学习。

内容的提问来源于stack exchange,提问作者CuriousDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:01:07