变量名前的下划线“_”对 Flutter 意味着啥

Posted

技术标签:

【中文标题】变量名前的下划线“_”对 Flutter 意味着啥【英文标题】:What does Underscore "_" before variable name mean for Flutter变量名前的下划线“_”对 Flutter 意味着什么 【发布时间】:2019-04-08 02:11:20 【问题描述】:

参考Flutter教程,遇到下划线_

我知道在 Java 中,_ 被用作私有变量的命名约定。

    它是否也适用于 Flutter?请注意,Flutter 中没有公共/受保护的。 _ 真的是私有的(其他类无法访问)还是只是一个命名约定?

变量

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);
  ...

    _ 是否也将 Widget 设为私有?这样的话,主类是不是无法评估Widget?

功能

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

【问题讨论】:

***.com/a/53022431/10269042 【参考方案1】:

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

通常的做法是将小部件的State 实现设为私有,这样它只能由相应的StatefulWidget 实例化:

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


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

【讨论】:

【参考方案2】:

来自Dart guide

与 Java 不同,Dart 没有关键字 public、protected 和 私人的。如果标识符以下划线 (_) 开头,则它是私有的 到它的图书馆。详情请见Libraries and visibility。

【讨论】:

【参考方案3】:

私有字段还有一个优势,即 Lint 可以识别哪些字段已声明/实例化但未使用,这有助于识别人为错误。

如果您声明一个公共字段,该字段将来可能会被该类之外的类访问,因此如果您错误地添加了该字段,Lint 不会警告您。

【讨论】:

以上是关于变量名前的下划线“_”对 Flutter 意味着啥的主要内容,如果未能解决你的问题,请参考以下文章

C#中变量名前的@符号是啥意思? [复制]

struct中变量名前的点是啥意思?

包名前的关键字“unit”有啥作用?

Swiftui 中 init() 中变量前的下划线是啥意思?

Python中变量名里面的下划线

请问vc中为啥有的函数前缀为下划线,有的函数无下划线?两者有啥区别?