Flutter中变量名前的下划线"_"是什么意思?

142

参考 Flutter 教程时,我遇到了一个下划线 _

我知道在 Java 中,_ 用作私有变量的命名惯例。

  1. Flutter 中也适用吗?注意 Flutter 中没有公共 / 受保护的概念。
  2. _ 真的会被设置为私有(其他类无法访问)还是只是一种命名惯例?

变量

class RandomWordsState extends State<RandomWords> {
  final List<WordPair> _suggestions = <WordPair>[];
  final Set<WordPair> _saved = new Set<WordPair>();
  final TextStyle _biggerFont = const TextStyle(fontSize: 18.0);
  ...
}
  1. 下划线是否也会使Widget变成私有的?那么主类将无法访问Widget吗?

功能(Function)

Widget _buildRow(WordPair pair) {
  final bool alreadySaved = _saved.contains(pair);  // Add this line.
  ...
}

1
https://stackoverflow.com/a/53022431/10269042 - anmol.majhail
3
什么白痴建议将_作为语言语法的一部分?真是让人失望! - Georgiy Chebotarev
@GeorgiyChebotarev 嗯,程序员可以分为三个群体:静态类型派动态类型派无所谓类型派。有些人喜欢使用类型和关键字,有些人只想写出"伪"代码,还有些人则不在意。 - undefined
3个回答

190

这不仅是一种命名约定。下划线字段、类和方法只能在定义它们的 .dart 文件中使用。

通常,将小部件的 State 实现设为私有,以便只能由相应的 StatefulWidget 实例化:

class MyPage extends StatefulWidget {
  @override
  _MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

100

来自 Dart指南

Dart与Java不同,没有public、protected和private等关键字。如果标识符以下划线(_)开头,则其为所在库的私有成员。详情请参阅库和可见性


2

私有字段还有一个优点,即Lint可以识别已声明/实例化但未使用的字段,从而帮助识别人为错误。

如果你声明了一个公共字段,该字段可能会被未来的类访问,因此如果您误添加该字段,Lint无法警告您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接