Dart基础语法
一、文章概览
- 主要内容:介绍Dart语言的基础知识,包括安装、变量定义、数据类型、集合操作、函数定义及使用等,旨在帮助读者快速掌握Dart语言,为学习Flutter打下基础。
二、Dart语言简介
- 背景:Dart是由Google开发的一种编程语言,被选为Flutter框架的开发语言。尽管可能希望使用其他熟悉的语言(如JavaScript、Java等)开发Flutter,但目前只能使用Dart。
- 学习建议:对于有编程基础的开发者,Dart的学习难度不大,主要关注其语法差异和特性即可。
三、Dart的安装与配置
- 安装原因:虽然Flutter SDK内置了Dart,但单独安装Dart SDK可以方便单独学习和运行Dart代码。
- 安装方式:
- 通过工具安装:
- Windows:使用Chocolatey。
- macOS:使用Homebrew。
- 直接下载SDK:
- 访问https://dart.dev/tools/sdk/archive下载对应操作系统的SDK。
- 配置环境变量。
- 通过工具安装:
- VSCode配置:
- 推荐使用VSCode作为Dart的开发工具。
- 需要安装Dart插件,便于编写和运行Dart代码。
四、Hello Dart
- Hello World示例:
main(List<String> args) { print('Hello World'); }
- 入口函数:
main
函数是Dart程序的入口,必须显式定义,且无返回值。 - 参数传递:通过
List<String>
传递命令行参数。 - 字符串定义:可以使用单引号或双引号。
- 分号:每行语句以分号结尾。
- 入口函数:
五、定义变量
- 明确声明:
String name = 'coderwhy'; int age = 18; double height = 1.88;
- 变量类型必须明确声明,且不能将其他类型赋值给已声明类型的变量。
- 类型推导:
var
:var name = 'coderwhy';
- 类型由赋值推导,但不能改变类型。
dynamic
:dynamic name = 'coderwhy'; name = 18; // 允许改变类型,但不推荐使用。
final
和const
:final name = 'coderwhy'; // 值不可修改 const age = 18; // 值不可修改,且必须是编译时常量
final
可以在运行时动态赋值,而const
必须是编译时确定的值。
六、数据类型
- 数字类型:
- 整数(
int
):int age = 18; int hexAge = 0x12;
- 浮点数(
double
):double height = 1.88;
- 字符串与数字转换:
var one = int.parse('111'); // 字符串转整数 var two = double.parse('12.22'); // 字符串转浮点数 var num1Str = 123.toString(); // 数字转字符串 var num2StrD = 123.456.toStringAsFixed(2); // 保留两位小数
- 整数(
- 布尔类型:
var isFlag = true;
- Dart中布尔值只能是
true
或false
,不能像某些语言那样将非零值或非空值视为true
。
- Dart中布尔值只能是
- 字符串类型:
- 定义方式:
var s1 = 'Hello World'; var s2 = "Hello Dart"; var s3 = 'Hello\'Flutter'; // 使用转义字符 var s4 = "Hello'Flutter";
- 多行字符串:
var message1 = ''' 哈哈哈 嘿嘿嘿 嘻嘻嘻 ''';
- 字符串拼接:
var name = 'coderwhy'; var age = 18; print('my name is ${name}, age is $age');
- 定义方式:
- 集合类型:
List
:var letters = ['a', 'b', 'c', 'd']; List<int> numbers = [1, 2, 3, 4];
Set
:var lettersSet = {'a', 'b', 'c', 'd'}; Set<int> numbersSet = {1, 2, 3, 4};
Set
是无序的,且元素不重复。
Map
:var infoMap1 = {'name': 'why', 'age': 18}; Map<String, Object> infoMap2 = {'height': 1.88, 'address': '北京市'};
- 操作:
print(infoMap1['name']); // 根据key获取value print(infoMap1.entries); // 获取所有entries print(infoMap1.keys); // 获取所有keys print(infoMap1.values); // 获取所有values infoMap1.remove('age'); // 根据key删除元素
- 操作:
七、函数
- 基本定义:
int sum(num num1, num num2) { return num1 + num2; }
- 函数类型为
Function
,可以作为变量、参数或返回值。 - 箭头语法:
sum(num1, num2) => num1 + num2;
- 函数类型为
- 参数类型:
- 命名可选参数:
printInfo1(String name, {int age, double height}) { print('name=$name age=$age height=$height'); }
- 调用时可以指定参数名:
printInfo1('why', age: 18);
- 调用时可以指定参数名:
- 位置可选参数:
printInfo2(String name, [int age, double height]) { print('name=$name age=$age height=$height'); }
- 调用时按顺序传递参数:
printInfo2('why', 18, 1.88);
- 调用时按顺序传递参数:
- 参数默认值:
printInfo4(String name, {int age = 18, double height = 1.88}) { print('name=$name age=$age height=$height'); }
- 命名可选参数:
- 函数作为一等公民:
- 赋值给变量:
var bar = foo; bar('kobe');
- 作为参数传递:
test(foo);
- 作为返回值:
var func = getFunc(); func('kobe');
- 赋值给变量:
- 匿名函数:
movies.forEach((item) => print(item));
- 词法作用域:
- Dart的作用域由代码结构(
{}
)决定,优先使用局部变量,否则向外查找。
- Dart的作用域由代码结构(
- 词法闭包:
var adder2 = makeAdder(2); print(adder2(10)); // 12
- 闭包可以访问其词法范围内的变量。
- 返回值:
- 所有函数都有返回值,未指定时默认返回
null
。
- 所有函数都有返回值,未指定时默认返回
八、总结
本文详细介绍了Dart语言的基础知识,包括安装、变量定义、数据类型、集合操作和函数使用等。通过这些内容,读者可以快速掌握Dart语言的核心特性,为后续学习Flutter打下坚实的基础。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Ashine
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果