完整教程:Flutter---Dart基础
1.1变量与常量
·变量可以使用var,object,dynamic关键字来声明
·未初始化的变量默认是null
·声明常量使用final和const关键字,final关键字修饰的变量的值只能被设置一次,const关键字修饰的变量在编译时就已经固定
1.2内置数据类型
·常见的基本数据类型有8种:Number,String,Bool,List,Se,Map,Rune和Symbol
·Number类型分为整型和浮点型两种,使用int和double进行声明
·Number类型除了可以进行基本的加减乘除和位移操作,还提供了将字符串和数字相互转换的方法(
①int.parse():String类型转换int类型;
②double.parse():String类型转换为double类型;
③.toString:int类型转换为String类型;
思.toStringAsFixed():Double类型转换为String类型
)
·String类型通过单引号或者双引号进行声明
·Bool类型只有true和false两个值
·List表示列表,和数组是同一个概念,第一个元素的索引是0,最后一个元素的索引是list.length-1。
·Set用来表示集合,它的对象不需要按照特定的规则排序,对集合的访问和操作都是通过对象来实现的,因此集合不能有重复的对象,要创建一个空集合,可以使用带有类型参数的{},(eg:var name = <String>{}),Dart的集合还提供了add(),addAll()等常用的方法。
·Map以键值对(key-value)的形式进行存储。key和value可以是任何类型的对象,一个Map中,key只能出现一次,但是value可以出现多次
·Rune类型用来表示UTF-32字符串,并且可以将文字转换成符号表情或代表特殊含义的文字。
·Symbol很少用到
1.3函数
·Dart是一门面向对象的编程语言,所以函数也是对象,而函数属于Function类型,所以Dart可以把函数当成变量传给另外一个函数,也可以把Dart类的实例当作方法来调用。
想要理解这句话,可以参考以下
·main()是应用的入口函数
·函数的参数类型有两种,可选参数和必传参数(用@required修饰)。必传参数会显示在参数列表的前面,后面再跟上可选参数。可选参数分为可选命名参数和可选位置参数,可选命名参数的参数部分使用{}包裹,可选位置参数部分使用[]包裹。可选命名参数通过参数名来传递值,与顺序无关。这种在参数较多或者你想明确每个参数含义时特别有用。可选位置参数严格按照位置顺序进行传递,适合那些自然顺序或逻辑关联的参数
可选命名参数的例子
// 定义函数,使用 {} 声明可选命名参数
void configureApp({String? theme, int fontSize = 14, bool darkMode = false}) {
print('主题: $theme, 字号: $fontSize, 深色模式: $darkMode');
}
// 调用示例
void main() {
configureApp(theme: "蓝色", fontSize: 16); // 只传部分参数
configureApp(darkMode: true, theme: "暗黑"); // 顺序可交换
configureApp(); // 所有参数都使用默认值
}
可选位置参数的例子
// 定义函数,使用 [] 声明可选位置参数
String introduce(String name, [String? role, int years = 0]) {
var intro = '我是 $name';
if (role != null) {
intro += ', 是一名 $role';
}
if (years > 0) {
intro += ', 有 $years 年经验';
}
return intro;
}
// 调用示例
void main() {
print(introduce("小明")); // 我是小明
print(introduce("小红", "工程师")); // 我是小红, 是一名工程师
print(introduce("小刚", "设计师", 5)); // 我是小刚, 是一名设计师, 有 5 年经验
}
·几乎所有函数都会有一个返回值,如果没有明确指定返回值,那么函数会隐式地添加一个“return null;”语句。
1.4运算符
·算术运算符:+加法,-减法,*乘法,/除法,~/除法取整,expr取负,%取余
·自增和自减:++var先执行自增操作,var++先使用值再执行自增操作(谁在前,就先用谁),--var先执行自减操作,var--先使用值再执行自减操作。
·关系运算符:==,!=,> , < ,>= , <= ,
·类型判定运算符:as:判断是否属于某种类型,还可以将对象强制转换为特定类型。
is:指对象具有指定的类型,返回true。is!:指对象具有指定的类型,返回false
(当不确定类型时,用is或is!来问一问。当非常确定类型时,用as来命令它转换)
·位运算符:&按位与,&~按位取反,|按位或,^按位异或,<<按位左移,>>按位右移
·逻辑运算符:&&与,||或,!非
·条件表达式:
三目表达式(判定条件是Bool值):condition ? expr1 : expr2
??表达式(判定条件是否为null):expr1 ?? expr2
·级联运算符(..)允许你在同一个对象上连续调用多个方法或访问多个属性,而无需重复引用该对象(两个点的级联运算符算不上是一个运算符,它只是一种特殊语法,用于简化表达式)
例子
class Person {
String name = '';
int age = 0;
String city = '';
void introduce() {
print('我叫$name,$age岁,来自$city');
}
}
void main() {
// 不使用级联运算符
var person1 = Person();
person1.name = '张三';
person1.age = 25;
person1.city = '北京';
person1.introduce();
// 使用级联运算符
var person2 = Person()
..name = '李四'
..age = 30
..city = '上海'
..introduce();
}
·Mixin:Java中类的继承都是很简单的单继承,也就是说一个子类只有一个父类。而Dart的Mixin相当于多继承,也就是说一个子类可以继承多个父类。Dart使用with关键自来实现Mixin的功能
浙公网安备 33010602011771号