Flutter开发-Dart语言基础-1

        Dart是一种易于学习,易于扩展,并且可以部署到任何地方的应用编程语言.Dart是面向对象的编程语言,由Google在2011推出.

相关概念:

1)Dart真正实现了"一切皆对象",即使数值类型,函数方法和null都是对象,上帝类是Object类.
2)Dart是强类型语言,类型标识是可选的,Dart会自动推断变量的具体类型.如果要指明某个对象为不确定类型,可以用dynamic(动态性)关键字来修饰变量.
3)Dart支持泛型,和Swift类似.
4)Dart支持顶级函数(main函数等,也是程序的入口),静态方法,实例方法.支持嵌套函数(函数内部创建函数)等.
5)Dart没有public,private等关键字,默认一些变量和方法都是公有的,如果想声明私有变量或者方法,可以用"_(下户线)"开头声明.
6)Dart可以使用分号作为语句的结束,也可以不写.
7)Dart注释.//和/**/

变量

变量的定义用var关键字,类型可以不写:

var name = "flutter";// String类型
var age = 20; // int 类型
var height = 1.80; // Double 类型

        当给变量赋值的时候,变量的类型已经确定,此时不能给变量赋值其他类型值:

var name = "flutter"; //String
name = 12;// 此时报错
var error

可以使用特定类型来定义变量

String newName = "my flutter";
int newAge = 21;
double newHeighth = 1.85;

变量的类型如果可变,可以用dynamic或者Obejct关键字来定义变量

dynamic flu = "Flutter"; //String类型
print("flu的值为:$flu");
flu = 12; //int 类型
print("flu的值为:$flu");

I/flutter (25846): 开始点击count
I/flutter (25846): 点击完成count=1
I/flutter (25846): flu的值为:Flutter
I/flutter (25846): flu的值为:12

Object da = "Dart";
print("da的值为:$da");

da = 2.0;
print("da的值为:$da");
I/flutter (25846): da的值为:Dart
I/flutter (25846): da的值为:2.0

变量默认值

如果声明一个变量而没有给他赋值的话,其默认值是null,null在Flutter中也是一个对象.

var stuName;
print("stu name:$stuName");
dynamic stuNewName;
print("stu new name:$stuNewName");

I/flutter (25846): stu name:null
I/flutter (25846): stu new name:null

class关键字

class关键字用于创建一个类,如果不指明继承哪个类,默认继承上帝类Object

class Student extends Object {

}

常量

final 和 const

        如果一个想定义一个常量,即一个变量的值被赋值后一直不会改变,可以通过final和const来声明,final修饰的变量在声明时不赋值,而在对象初始化时赋值;const修饰的变量必须赋值,否则报错.final 类似于Swift或者OC中的只读属性.

class Student extends Object {
  static const constVar; //const 修饰的变量必须赋值
  final name;
  Student(this.name);
}

// 使用
Student stu_1 = Student("waitwalker");
print("stu_1 name:${stu_1.name}");
I/flutter (25846): stu_1 name:waitwalker
final error

        const 修饰的变量赋值后就不会报错了,此时如果给stu_1.name重新赋值会报错,final修饰的变量不允许调用setter方法:

class Student extends Object {
  static const constVar = "const 修饰的变量必须赋值"; //const 修饰的变量必须赋值
  final name;
  Student(this.name);
}

// 使用
Student stu_1 = Student("waitwalker");
print("stu_1 name:${stu_1.name}");
stu_1.name = "new";
const error

Dart标准库中内置类型

判断对象的类型

在上帝类中有个只读属性runtimeType用于获取对象的类型:

print("stu_1 type:${stu_1.runtimeType}");
print("stu_1 type:${stu_1.name.runtimeType}");

I/flutter (25846): stu_1 type:Student
I/flutter (25846): stu_1 type:String

数值类型num

        num是Dart基本数值类型,其是int和doule的父类,Dart只有整型和浮点型两种基本数据类型,其长度依据操作系统自由伸缩:

abstract class int extends num {
}

abstract class double extends num {
}

        可以看到int类在num基本的运算操作基础上增加了一些位运算方法,double增加了一些如取绝对值等方法.

字符串String

        String是charCodes字符的集合,charCodes默认采用的是UTF-16编码,一个String在定义时可以采用单引号或者双引号将内容包起来.

abstract class String implements Comparable<String>, Pattern {

}

        如果多行字符串,可以采用三重(单/双)引号,将内容包起来,这个类似于Python和Swift的相关语法.

String today = """
Today is very hot.
Yes.
No.
""";
print("toady:$today");

I/flutter (26474): toady: Today is very hot.
I/flutter (26474): Yes.
I/flutter (26474): No.

        String类中还定义了一些截串,获取索引,比较两个字符串,获取长度等一些常规方法.

布尔类型bool

bool类型很简单,非零即真:

bool isiPad = false;
print("is iPad:$isiPad");
I/flutter (26474): is iPad:false

集合类型List

        Dart中集合类型List和Python中的List可以说一脉相承,List是一个泛型集合,可以存储任何需要的对象类型,其常规的增删改查操作方法和其他语言集合类型相似.

List list = ["date",12,45.0,"weather"]; //初始化方式
List list_a = List(10); //指定长度初始化
list_a.add("12"); //添加操作
list_a.add(12);
list_a.removeAt(1); //移除指定索引位置元素
list_a.removeLast(); //移除最后一个元素

字典类型(键值类型)Map

        Dart中的Map类型和其他语言中Map或者Dictionary中相似,在定义的时候可以指定键值得类型.

Map dic = Map();
dic["name"] = "flutter";
dic["version"] = "1.2";
Map dic_a = {
"name":"flutter",
"version":"1.2"
};

print("dic:$dic");
print("dic_a:$dic_a");

I/flutter (26474): dic:{name: flutter, version: 1.2}
I/flutter (26474): dic_a:{name: flutter, version: 1.2}

Runes类型

Runes类型一般用于编码特殊的Unicode,例如emoji.

方法

方法是程序功能的集合.

方法的常规定义

返回值类 方法名() {
return value;
}

// 例如
String getName() {
return name;
}

Student stu_1 = Student("waitwalker");
print("stu_1 name:${stu_1.name}");
String newN = stu_1.getName();
print("newN:$newN");

I/flutter (26474): stu_1 name:waitwalker
I/flutter (26474): newN:waitwalker

方法参数

        Dart方法的参数可以是变量也可以是一个方法,如果方法参数是一个变量,可以指定变量类型也可以不指定,建议指定.

方法中也可以设定可选参数,可选参数用[]包起来.

// 显示名称
String showName(String firstName) {
  return name + firstName;
}

Student student = Student("xiaoming");
String fullName = student.showName("wang");
print("full name:$fullName");

I/flutter (26474): full name:xiaomingwang

方法作为参数

Dart允许在方法中传递参数,其实传递的是方法的地址:

int sum(int a, int b) {
  print("sum result:${a + b}");
  return a + b;
}

int toatl(int a, int b, Function getSum) {
  return getSum(a,b);
}

void result() {
int r = toatl(12, 18, sum);
print("result:$r");
}

Student student = Student("xiaoming");
String fullName = student.showName("zhang",12);
print("full name:$fullName");
student.result();

I/flutter (26474): sum result:30
I/flutter (26474): result:30

方法参数默认值

在定义方法时,可选参数也可以指定一个默认值:

// 显示名称
String showName(String firstName, [int age = 20]) {
return name + firstName + "age is" + age.toString();
}

Student student = Student("xiaoming");
String fullName = student.showName("zhang",12);
print("full name:$fullName");
I/flutter (26474): full name:xiaomingzhang age is12

方法中嵌套方法

Dart语法方法中是可以嵌套方法的:

void size(int a) {
void intervalSize () {
print("size in:$a");
}

print("size out:$a");
}

匿名函数

        Dart中匿名函数和Python中的lamada匿名函数一样,不用给方法起名字了,在定义的时候直接用一个变量来接收,引用时直接引用这个变量:

var lamadaFunc = (String name) => "${name}";
student.lamadaFunc("wangxiaoming");

闭包

        闭包是对匿名函数的一种应用,Dart 其在Function类型,而在Swift中常当作函数参数用于一些异步回调,在Dart定义:

Function totalNum(int a) {
return (int b) => a + b;
}

var totalNum = student.totalNum(12);
var value = totalNum(3);
print("value:$value");
I/flutter (26474): value:15
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 229,908评论 6 541
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,324评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,018评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,675评论 1 317
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,417评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,783评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,779评论 3 446
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,960评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,522评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,267评论 3 358
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,471评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,009评论 5 363
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,698评论 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,099评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,386评论 1 294
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,204评论 3 398
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,436评论 2 378