Dart 中表达式和语句的区别?

问题描述 投票:0回答:3

由于不同语言对表达式和语句的定义不同,那么它们在 Dart 中有何区别?

dart expression dart-pub
3个回答
12
投票

简短回答

表达式是,语句是做事

示例

如果你能看到例子,这就更有意义了。

表达式

表达式在运行时具有值。

  • 42
  • true
  • hello
  • 1 + 1
  • x
  • myObject
  • myInt + 1
  • k++
  • p > 0
  • condition ? expr1 : expr2
  • 'hello'.toUpperCase()
  • myObject.toString()
  • myObject.someMethod()
  • myObject?.someProperty?.someMethod()
  • myString.isEmpty
  • [1, 2, 3]
  • [...list1]
  • <String, String>{...a, ...b}

声明

语句执行某些操作,但其本身在运行时没有值。语句不是表达式,但它们可以包含表达式。

  • myInt = 1;
  • print('hello');
  • return null;
  • if (name != null) { return name; } else { return 'Guest'; }
  • for (var i = 0; i < 5; i++) { message.write('!'); }
  • break;
  • while (!isDone()) { doSomething(); }
  • yield k++;
  • assert(text != null);
  • throw FormatException('Expected at least 1 section');
  • void distanceTo(Point other) => throw UnimplementedError();

注意:这里的大多数示例都是通过在文档中搜索关键字表达式语句来获得的。

澄清

这些是表达式(注意缺少分号):

  • myInt = 1
  • print(i)

这些是表达式语句(注意分号):

  • myInt = 1;
  • print(i);

请参阅this以获得更深入的解释。


5
投票

我对 Dart 还很陌生,但有了之前的知识(并阅读了 Dart 语言之旅):

  • 表达式通常会计算出某些值,例如,当使用条件表达式时,
    condition ? expr1 : expr2
    的值为
    expr1
    expr2
  • 语句没有任何价值,或者通常不执行任何直接更改值的操作。

A

statement
包含
expressions
,但
expression
不能包含
statement

以上是我试图为您简化的对要点的解释,是在阅读类别重要概念的语言之旅时发现的,如下所示:

Dart 同时具有 表达式(有运行时值)和 语句(没有运行时值)。例如,条件表达式

condition ? expr1 : expr2
的值为
expr1
expr2
。将其与 if-else 语句 进行比较,后者没有任何价值。一个语句通常包含一个或多个表达式,但表达式不能直接包含语句。


1
投票

来自维基百科:

在数学中,表达式或数学表达式是根据依赖于上下文的规则而形成的符号的有限组合。数学符号可以指定数字(常量)、变量、运算、函数、括号、标点符号和分组,以帮助确定运算顺序以及逻辑语法的其他方面。

Dart 中也有同样的事情。

这种情况下的语句可以被描述为表达式和可能的其他符号的组合,这是正确表示具体语句所需的。

在 Dart 中,语句可以为空,这意味着语句不包含任何表达式。空语句可以通过格式正确的符号来表述,也可以根据上下文来确定。

if-else
语句的示例(伪代码)。

if (expression) { statement(s) } else { statement(s) }

© www.soinside.com 2019 - 2024. All rights reserved.