求推荐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
相关产品推荐
相关产品推荐

