Dart语法基础
Dart语言简介
Dart是Google推出的一门编程语言,最初是希望取代Javascript运行在浏览器端,后台慢慢发展成可以开发Android、iOS和web端APP的一门高质量的编程语言,目前Dart的版本是Dart2。
Dart语言特性
Productive Dart’s syntax is clear and concise, its tooling simple yet powerful. Sound typing helps you to identify subtle errors early. Dart has battle-hardened core libraries and an ecosystem of thousands of packages.Fast Dart provides optimizing ahead-of-time compilation to get predictably high performance and fast startup across mobile devices and the web.Portable Dart compiles to ARM and x86 code, so that Dart mobile apps can run natively on iOS, Android, and beyond. For web apps, Dart transpiles to JavaScript.Approachable Dart is familiar to many existing developers, thanks to its unsurprising object orientation and syntax. If you already know C++, C#, or Java, you can be productive with Dart in just a few days. Reactive Dart is well-suited to reactive programming, with support for managing short-lived objects—such as UI widgets—through Dart’s fast object allocation and generational garbage collector. Dart supports asynchronous programming through language features and APIs that use Future and Stream objects. |
Dart语法简介
官网上对于Dart的语法也有详细介绍,不过是全英文的,如果对英文没有什么阅读障碍,可以直接移步官方文档。
下面我们通过Android Studio作为开发工具来一起了解Dart的语法基础。
新创建的Flutter项目,Dart代码主要在lib/main.dart文件中,由于本篇主要讲的是Dart的语法,故暂时不看main.dart文件,在lib目录下我们创建一个新的.dart文件grammar.dart,如图:
然后我们在grammar.dart中键入以下代码
// Define a function. printInteger(int aNumber) { print('The number is $aNumber.'); // Print to console. } // This is where the app starts executing. main() { var number = 42; // Declare and initialize a variable. printInteger(number); // Call a function. } |
这段代码一些基本的用法,基本所有的语言都通用的语法:
// This is a comment. 单行代码注释,不用多说
int int是Dart中的一种数据类型,同时还有其他的数据类型如:String List bool等。
42 一个数字字面量,数字字面量是编译时常量的一种。
print()显示输出的一种便捷方法
'xxx' 或者 “xxx”
两种方式都可以表示字符串
$variableName 或者 ${expression}字符串插值:包含一个变量或表达式的字符串等效于字符串字面量
sample: var name = 'zgy'; print("hi,I am $name"); int a = 1,b = 2; print("$a + $b = ${a + b}");
main()主函数,程序从这里开始。。。
var 一种声明变量而不指定其类型的方法示例代码中 var number = 42; //这里42被推断为int类型
Dart重要概念
一切皆对象,无论数字、函数、和null都是对象。所有对象都继承自[Object]类。
Dart是强类型语言,但是类型声明可选,因为Dart可以推断类型。(类似Swift)
Dart支持通用类型,如List(整数列表)或List(任何类型的对象列表)。
Dart支持顶级函数(如main()),以及绑定到类或对象(分别是静态方法(static)和实例(instance)方法)的函数。您还可以在函数(嵌套或局部函数)中创建函数。
类似地,Dart支持顶级变量,以及绑定到类或对象(静态和实例变量)的变量。实例变量有时被称为字段或属性。
与Java不同,Dart没有公开、保护和私有的关键字。如果标识符以下划线(_)开头,则该标识符对其库是私有的。有关详细信息,请参见[库和可见性]。
标识符可以以字母或下划线(_)开头,然后是这些字符加上数字的任何组合。
有时候,某事物是一个表达(expression )还是一个语句(statement)是很重要的,所以这两个词要准确。
Dart工具可以报告两种问题:警告和错误。警告只是表明您的代码可能不工作,但它们不会阻止您的程序执行。错误可以是编译时错误,也可以是运行时错误。编译时错误阻止了代码的执行;运行时错误导致代码执行时引发异常。
Dart变量
声明变量有多种方式:
main(){
int a = 10;
//指明变量类型为int
bool = true;
//指明变量类型为bool
String name = 'zgy';
//指明变量类型为String
var name = 'zgy';
//自动推断变量类型String
dynamic name = 'zgy';
//自动推断变量类型String
}
默认值
未初始化的变量的初始值为null。
Final 和 const修饰符
如果您从未打算更改一个变量,请使用final或const修饰他,而不是使用var或其他变量类型。最终变量只能设置一次;const变量是一个编译时常数。(Const变量是隐式最终变量。)最终的顶级或类变量在第一次使用时被初始化。
注意:实例变量可以是final,但不能是const。[实例变量定义在对象一级,它可以被类中的任何方法或者其他类中的方法访问,但是不能被静态方法访问。]
Sample: final name = 'zgy'; // Without a type annotation final String nickname = 'zgy'; |
你无法更改final变量的值:
name = 'zgy'; //Error:a final variable can only be set once. //这是个错误的示例,使用final声明的变量是不可以更改的。 |
对于想要在编译时确定并且不再变的变量,使用const。如果const变量位于类级别,则将其标记为静态const。
在声明该变量时,将该值设置为编译时常量,例如数字或字符串字面量、const变量或常量数字算术运算的结果:
const bar = 1000000; // Unit of pressure (dynes/cm2) const double atm = 1.01325 * bar; // Standard atmosphere |
const关键字不只是声明常量变量。您还可以使用它来创建常量值,以及声明创建常量值的构造函数。任何变量都可以赋一个常量值。
var foo = const []; final bar = const []; const baz = []; // Equivalent to `const []` |
您可以从const声明的初始化表达式中省略const,如上面的baz。
您可以更改一个非final的非const变量的值,即使它曾经有一个const值:
foo = [1, 2, 3]; // Was const []
你不能改变const变量的值:
baz = [42]; // Error: Constant variables can't be assigned a value.
Final和Const的区别:
- 区别一:final要求变量只能初始化一次,并不要求赋的值一定是编译时常量,可以是常量也可以不是。而const要求在声明时初始化,并且赋值必需为编译时常量。
- 区别二:final是惰性初始化,即在运行时第一次使用前才初始化。而const是在编译时就确定值了。
内建类型
Dart有以下几种内建的数据类型:
- numbers
- strings
- booleans
- lists (also known as arrays)
- maps
- runes (for expressing Unicode characters in a string)
- symbols
下面用一段代码来演示以上各类数据类型:
main() { // numbers 有两种形式 int和double var a = 0; int b = 1; double c = 0.1; // strings var s1 = 'zgy'; String s2 = "zgy"; // booleans var real = true; bool isReal = false; // lists var arr = [1, 2, 3, 4, 5]; Listarr2 = ['hello', 'world', "123", "456"]; Listarr3 = [1, true, 'zgy', 1.0]; // maps 在Dart2中new关键字是可选的 var map = new Map(); map['name'] = 'zhangsan'; map['age'] = 10; Map m = new Map(); m['a'] = 'a'; //runes,Dart 中 使用runes 来获取UTF-32字符集的字符。String的 codeUnitAt and codeUnit属性可以获取UTF-16字符集的字符 var clapping = '\u{1f44f}'; print(clapping); // 打印的是拍手emoji的表情 // symbols 符号对象表示在Dart程序中声明的操作符或标识符。您可能永远不需要使用符号,但是对于按名称引用标识符的api来说,它们是非常重要的,因为缩小改变了标识符名称而不是标识符符号 print(#s == new Symbol("s")); // true } |