Flutter入门第一步-Dart语言入门(一)

Flutter入门第一步-Dart语言入门(一)

最近学习flutter的时候,看了下官方文档里的示例代码,看得我一头雾水,就像是雾里看花(此处@东北酱)。在我个人看来,Dart语言的语法有点像是java和js的结合体,如果熟悉java的胖友学起来应该不会太费力。所以磨刀不误砍柴工,我先学一点基础的Dart语言,然后再开始我的fluter之旅。
参考资料:https://blog.csdn.net/weixin_33775582/article/details/91377034
http://www.cndartlang.com/669.html

1.工具
我个人使用了一个在线的编译工具 DartPad,当然了也有可供本地使用的IDE,自行下载吧。

2.Helloword!
在学习一门新的语言时,我们一般干的第一件事就是输出一个helloword,Dart也不例外。在Dart中输出helloword很简单。

在这里插入图片描述

习惯了JAVA的人可能会比较疑惑,为什么会有单引号也可以。且往下看

3.数据类型
首先我们需要明确一点,Dart是是一个纯正的面向对象的动态类型的语言。Dart中所有东西都是对象,包括数字、函数等它们都继承自Object,并且默认值都是null(包括数字)因此数字、字符串都可以调用各种方法

Dart中支持以下数据类型:

Numbers
Strings
Booleans
List(也就是数组)
Maps

首先我们看下字符串,字符串赋值的时候,可以使用单引号,也可以使用双引号(如上面的helloword)。但需要注意的一点是,在使用单引号时,可以内嵌双引号,在使用双引号时,可以内嵌单引号。但使用单引号时不能内嵌单引号,双引号也是同理,否则需要加转义符来转义。
如下:
在这里插入图片描述其次,我们在做字符串拼接的时候,可以省略 +号了。当然了也可以使用+。这是因为在之前版本的SDK中不支持用+连接字符串。
在这里插入图片描述
当我们需要输出一个变量的值时候,我们需要加一个$符。如
在这里插入图片描述
当我们不需要转义的时候,我们可以在要输出的句子之前加一个r,注意r一定要挨着引号,不然会报错。
在这里插入图片描述
4.关键字:const final
const 定义的是编译时常量,只能用编译时常量来初始化
final 定义的常量可以用变量来初始化
var、final等在左边定义变量的时候,并不关心右边是不是常量
但是如果右边用了const,那么不管左边如何,右边都必须是常量

5.函数
首先我们需要明确一点,在Dart中,函数也是一个对象当我们的函数没有返回值时,会返回一个null.我们以这个方法为例:

void main() {
  
  var name = getName("panghu");
  print(name);
  
}

String getName(String name)
{
  return "name is $name";
}

由于Dart语言是动态类型的,我们也可以把它改成这样:

void main() {
  
  var name = getName("panghu");
  print(name);
  
}

 getName( name)
{
  return "name is $name";
}

不过这样的代码会在我们的时候难度变得很大。如果函数只是简单的返回一个表达式的值,可以使用箭头语法:

void main() {
  
  var name = getName("panghu");
  print(name);
  
}

 getName( name)=>"name is $name";

然后看下面的这段代码:

var callbacks = [];
for (var i = 0; i < 3; i++) {
  // 在列表 callbacks 中添加一个函数对象,这个函数会记住 for 循环中当前 i 的值。
  callbacks.add(() => print('Save $i')); 
}
callbacks.forEach((c) => c()); // 分别输出 0 1 2

当在for循环中调用add方法时,我们加入到数组中的是一个函数的对象。然后再下方的foreach循环中,我们每次遍历的时候执行了一遍c这个对象(函数)的方法本身。
可选参数函数,Dart语言支持两种可选参数函数:1.命名可选参数 2.位置可选参数。

命名可选参数使用大括号{},默认值用冒号:
位置可选参数使用方括号[],默认值用等号=

特点:
命名可选参数:大括号外是必选参数,大括号里是可选参数,且按照key:value的形式进行复制,不限定位置。
位置可选参数:方括号外是必选参数,方括号内是可选参数,且按照形参的顺序,以key=value的形式进行赋值。

看下面的例子

FunX(a, {b, c:3, d:4, e})
{
  print('$a $b $c $d $e');
}

FunY(a, [b, c=3, d=4, e])
{
  print('$a $b $c $d $e');
}


void main()
{
  FunX(1, b:3, d:5);
  FunY(1, 3, 5);
}

我们输出的结果是:

1 3 3 5 null
1 3 5 4 null

函数闭包
这个概念对于js开发者应该是不会陌生,但对于java开发者来说却是不太熟悉。
我们看下面这个例子:

Function makeSubstract(num n)
{
  return (num i) => n - i;
}

void main()
{
  var x = makeSubstract(5);
  print(x(2));
}

我尝试给大家分析一下:在makeSubstract中,我们返回了一个Function 类型的对象,也就是返回了一个函数,更确切的说我们把一个匿名函数的定义放在了makeSubstract函数体中。所以在main函数中,我们的x其实是一个函数对象,它其实是这个样子的:

int x(num i)
{
return 5-i;
}

函数别名: 看下面的例子

typedef int Compare(Object a, Object b);
 
class SortedCollection {
  Compare compare;
 
  SortedCollection(this.compare);
}
 
// Initial, broken implementation.
int sort(Object a, Object b) => 0;
 
void main() {
  SortedCollection coll = new SortedCollection(sort);
  assert(coll.compare is Function);
  assert(coll.compare is Compare);
}

关于函数和类型就到这里,下篇文章我们看一下Dart的别的部分

发布了47 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41525021/article/details/104280538