Flutter学习指南(3):Dart语言(1)---基本熟悉

一句话就是简单,特别的简单,如果有语言基础就更简单了。半小时足够学习使用了。dart2基础教程 --- dart2中文文档

dart 可以干什么 : 服务器,网页 ,app
Flutter :Write a mobile app that runs On both iOS and Android.
Web:Write an app that runs in any modern web browse;
Server:Write a command-line app or server-side app;

了解:


1.Dart 语言在2011年10月由 Google 发布,并在2012年10月发布第一个里程碑版本 M1。Dart 作为一种结构化的Web开发语言,既让人感觉熟悉,又足够灵活。既适用于快速原型开发,又适用于组织大型的代码库。既可以用在桌面版和移动版的浏览器中,也可以在服务器端使用。总体上说,Dart 语言是感觉熟悉的并且符合程序员的直觉,特别是你已经掌握了 Java、JavaScript 等语言的话。

2.Dart 是一门很特别的语言,(1)特性是可选类型。(2)Dart中的类和接口是统一的,类即接口,你可以继承一个类,也可以实现一个类(接口),自然也包含了良好的面向对象和并发编程的支持。

3.编程语言并不是孤立存在的,Dart也是这样,他由语言规范、虚拟机、类库和工具等组成: SDK:SDK 包含 Dart VM、dart2js、Pub、库和工具。 Dartium:内嵌 Dart VM 的 Chromium ,可以在浏览器中直接执行 dart 代码。 Dart2js:将 Dart 代码编译为 JavaScript 的工具。 Dart Editor:基于 Eclipse 的全功能 IDE,并包含以上所有工具。支持代码补全、代码导航、快速修正、重构、调试等功能。

  1. (1)Dart是AOT(AheadOfTime)编译的,【预编译】,编译成快速、 可预测的本地代码,使Flutter 几乎都可以使用 Dart编写。 这不仅使 Flutter变得更快,而且几乎所有的组件(包括 所有的小部件)都可以定制 。
    (2) Dart也可以 JIT ( Just In Time)编译,【即时编译】。开发周期异常快,工作流颠覆常规(包括 Flutter流行的亚秒级有状态热重载) 。
    (3) Dart可以更轻松地创建以 60年s运行的流畅动画和转场。 Dart可以在没有锁的情况 下进行对象分配和垃圾回收。 就像 JavaScript一样, Dart避免了抢占式调度和共享 内存(因而也不需要锁) 。 由于 Flutter应用程序被编译为本地代码,因此不需要在领 域之间建立缓慢 的桥梁(例如, JavaScript 到本地代码 )。 它的启动速度也快得多 。
    (4)Dart使 Flutter不需要单独的声明式布局语言(如 JSX或 XML),或单独的可视化界 面构建器,因为 Dart 的声明式编程布局易于阅读和可视化。 所有的布局使用一种语 言,聚集在一处, Flutter很容易提供高级工具,使布局更简单 。
    且开发人员发现 Dart 特别容易学习,因为它具有静态和动态语言用户都熟悉的特性 。

入口


main() {
  print('hello world!');
}

在命令行中运行代码:

dart hello.dart

或者以检查模式运行:

dart --checked hello.dart

基本语法


  • Dart 中的所有东西都是对象,包括数字、函数等,它们都继承自 Object,并且对象的默认值都是 null(包括数字)。
  • Dart 中的语句以分号结束,并且不是选的。
  • Dart 的类型是可选的。Dart 语言本质上是动态类型语言,可以使用 var 声明变量,一个变量也可以被赋予不同类型的对象。但大多数情况,我们不会去改变一个变量的类型。在 Dart 中也可以使用类型来声明变量,就像在静态语言中做的那样。
  • Dart 支持顶层的变量和函数,就像 JavaScript 一样,它并不要求你像 Java 那样把所有的东西都放到类中。
一、数据类型

1.介绍:Dart中所有的都是对象,涵盖数字,函数,他们都是继承Object,默认的值都是null。
2.支持的类型: int ,double Strings Booleans List Maps Set Object dynamic

数值

num a=5;
num b=6;
print(a+b);
字符串

//字符串赋值的时候,可以使用单引号,也可以使用双引号
  var exam1 = "Ok?";

  //如果使用的是双引号,可以内嵌单引号
  //当然,如果使用的是单引号,可以内嵌双引号,否则需要“\”转义
  //String exam2 = ‘It\’s ok!’;
  String exam2 = "It's ok!";

  //使用三个单引号或者双引号可以多行字符串赋值
  var exam3 = '''Dart Lang
  Hello,World!''';

  //在Dart中,拼接字符串用“+”,是可以的,但是不推荐这样使用,应该使用${param};
  var name = "nihao";
  var sex = "dsf";
  print("name: ${sex}");
布尔值

bool ishello=false;
 if(ishello){
  print("nihao");
 }else{
 print

(4)容器: I、StringBuffer 说明:StringBuffer并不是容器,按照官方的说法,StringBuffer可以特别高效的构建多个字符串,另外,以前的用的add方法已经改为write;

StringBuffer sb = new StringBuffer();
sb.write("hello StringBuffer ");
sb ..write('nihao')..write('linghit');
print(sb.toString());
sb.clear();
print(sb.toString());

II、List 列表,也就是常说的数组 常见的添加、索引、删除等方法如下

// 使用List的构造函数,也可以添加int参数,表示List固定长度
//var vegetables = new List();

var persons = ['小智', '明兄'];

// 添加元素
persons.add('小约妹');

// 添加多个元素
persons.addAll(['小莫', '小污']);

// 获取List的长度
print(persons.length);

// 利用索引获取元素
print(persons[0]);

// 查找某个元素的索引号
print(persons.indexOf('小莫'));

// 利用索引号删除某个元素
var appleIndex = persons.indexOf('小莫');
persons.removeAt(appleIndex);
// 删除所有的元素
persons.clear();
print(persons.length);
你可以使用sort()对List的元素进行排序
并且必须制定比较两个对象的函数,函数的返回值中
return <0 表示小于,0表示相同,>0表示大于

III、Set 集合在Dart中无序,并且每个元素具有唯一性 因为它是无序的,因此你不能像List那样用索引来访问元素 这个就不细说了,吃瓜观众自己下去看看

IV、Map

映射,也有人称之为字典 Map是一个无序的键值对容器

// Map的声明  (以往不同的点)
var initMap1 = {
    'one' : 1,
    'two' :2,
    'three' : 3
};
var initMap2 = new Map();
// 指定键值对的参数类型
var initMap3 = new Map<int, String>();

print(initMap["one"]);

V、迭代:

//如果迭代的对象是容器,那么可以使用forEach或者for-in
var diedai = [0, 1, 2];

diedai.forEach((x) => print(x));//forEach的参数为Function

for(var x in diedai) {
    print(x);
}
二、函数

介绍:首先,函数也是对象,当没有指定返回值的时候,函数返回null I、简单应用

String hello(String name)
{
 return 'Hello $name!';

Dart语言中,参数类型也是可选的

String hello(name)
{
 return 'Hello $name!';

建议还是定义好,输入的类型以及输出的类型,方便后人阅读和调用

如果函数只是简单的返回一个表达式的值,可以使用箭头语法 =>expr; 它等价于{return expr;}

hello(name) => 'Hello $name!';
Dart中匿名函数的写法 (name)=>’Hello $name!’;
于是可以如下定义匿名函数

var  hello = (name)=>'Hello $name!';

II、函数别名:

typedef int Add(int a, int b);
int Subtract(int a, int b) => a - b;

void main()
{
  print(Substract is Function);
  print(Substract is Add);
}
上面代码的命名感觉有点误导人的感觉
如果两个函数的参数和返回值都一样
那么is操作符就会返回true

III、函数的闭包 下面的代码有一点需要注意 初始化变量的时候,参数对应的是函数的参数num n 调用函数类型变量的时候,参数对应的是返回值中的参数num i

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

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

下面这段很有意思的代码 需要反应过来一件事:Dart中函数也是对象 下面的代码应该看得明白,之后会讲控制语句以及容器

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

IV、可选参数: Dart中支持两种可选参数:命名可选参数和位置可选参数 但两种可选不能同时使用

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

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

在命名可选参数的函数中,大括号外的a为必填参数 大括号内的参数可以指定0个或多个 并且与顺序无关,在调用函数的时候需要指明参数名 没有赋值的参数值为null

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

在位置可选参数的函数中,大括号内的参数可以指定0个或多个 在调用的时候参数值会依次按顺序赋值

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

三、操作符和流程语句:(和其他语言差不多) 1、取整:

int a = 3;
int b = 2;
print(a~/b);//输出1

2、级联: 当你要对一个单一的对象进行一系列的操作的时候 可以使用级联操作符 ..

class Person {
    String name;
    String sex;
    int age;
   setAge(num age) =>this.age=age;

    String toString() => 'Name:$name\nSex:$sex\nage:$age';
}
void main() {
 Person p = new Person();
  p ..name = 'Xq'
     ..sex="nan"
    ..setAge(20);
  print(p);
}

3、if语句没有多大的区别: If语句的判断条件为bool值,用法和大多语言一样

if(2){
print("true");
}else{
print("false");
}

switch:也差不多;swith的参数可以是num,或者String

4.循环:

for(); while(); do{}while();没太多变化

5、异常处理: 在Dart中可以抛出非空对象(不仅仅是Exception或Error)作为异常

throw new ExpectException('值必须大于0!');
throw '值必须大于0!';

参考网站:

官网
flutter -dart 官网
官方网站:www.dartlang.org/
最新动态:news.dartlang.org
Twitter:twitter.com/dart_lang
Google+:plus.google.com/+dartlang/p…
Dartisans 社群: plus.google.com/communities… 讨论组
(Google Groups):groups.google.com/a/dartlang.…
Stackoverflow 问答支持: stackoverflow.com/questions/t…

在线试用:try.dartlang.org/ API 文档:api.dartlang.org/
FAQ:www.dartlang.org/support/faq…
所有文章:www.dartlang.org/articles/in…
语言向导:www.dartlang.org/docs/langua…
类库向导:www.dartlang.org/docs/librar…
Web开发向导:www.dartlang.org/docs/tutori…
代码风格指南:www.dartlang.org/articles/st…

语言规范:www.dartlang.org/docs/spec/i…
包管理工具Pub: pub.dartlang.org/
Bugs 和 Feature 列表:dartbug.com/

Dart 与 JavaScript、C#、Python 对比:synonym.dartlang.org/ Dart VM、 V8 和 dart2js 性能对比:www.dartlang.org/performance… Github 上各种 Dart 项目:github.com/dart-lang

工具: SDK:www.dartlang.org/docs/sdk/ ,SDK 包含 Dart VM、dart2js、Pub、库和工具。
Dartium:www.dartlang.org/dartium/ ,内嵌 Dart VM 的 Chromium ,可以在浏览器中直接执行 dart 代码。
Dart Editor:www.dartlang.org/docs/editor… ,基于 Eclipse 的全功能 IDE,包含以上所有。
国内镜像下载地址:dart.hanguokai.com/

非官方资源: Seth Ladd 的博客 blog.sethladd.com/ ,Dart 官方成员中最活跃的宣传员,他的博客上写有大量关于 Dart 的文章。 Chris Strom 的博客 japhr.blogspot.com/,《Dart for Hipsters》的作者,有许多 Dart 的文章。
Dartwatch blog.dartwatch.com/ ,《Dart in Action》的作者创建的关于 Dart 的网站。 15分钟看代码学 Dart:Learn Dart in Y Minutes learnxinyminutes.com/docs/dart/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容