`
goodjin
  • 浏览: 33226 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Dart语言简介

    博客分类:
  • Dart
 
阅读更多

Dart是谷歌开发的用于浏览器编程的一门语言,据说其主要目的是替代掉javascrip。其语法和javascript很相似,但比其简洁,也更容易看懂,可以说是属于一种小清新语言吧。本文基本上是翻译自官网:http://www.dartlang.org/language-tour/,主要简介Dart语言的主要组成部分:

1.程序基本结构

2.变量

3.内建类型

4.函数

5.控制流程

6.异常

ps:由于编辑器的限制,本文大部分代码被标示成了java代码,实为Dart


一.程序的基本结构

首先上代码:

main() {
  // Variables and values
  var number   = 42;
  var text     = "The value of number is";

  // Console output
  print("$text $number.");
}
 

 这段代码很容易懂,也体现了Dart语言的"小清新风格"。

 首先,main是必须定义的方法,是程序入口。

//双斜杠后面是程序注释,也可以使用/*  */来包含注释

var是声明变量,像javascript类似,可以不必声明变量的具体类型,与javascript不同,Dart不建议这样做。

双引号""或单引号''包围的表示字符串

print()方法是一个方便向屏幕打印的函数


二.变量

声明一个变量并赋值:

 

var name = 'Bob';
 

 如果只声明变量不赋值,则默认值为null,包括数字类型变量。在Dart里一切都是对象,数字也是一种对象类型,如:

num lineCount;
lineCount ==null;// true 

 

  从上面的代码可以看出声明变量时可以指定变量类型,这也是Dart建议的方式,像下面这样:

 

String name = 'Bob';
 

 使用final修饰还可以声明常量:

  常量一经定义其值就不能再改变。

final String name = 'Bob' ;
 

 

三.内建类型:

Dart内建了以下五种对象类型:

1.字符串String

就像上面的示例,在字符串中可以使用表达式,${expression },该表达式的值将会作为字符串的一部分。如果表达式只是一个变量,可以不加大括号,即:$var

var s ='string interpolation';
print('Dart has $s, which is very handy.');
print('That deserves all caps. ${s.toUpperCase()} is very handy!');
 

 比较字符串相等可以使用==号

字符串有一些常用方法,如:startWith,endWith,contains.字符串是不可变对象,也就是说它的值一旦创建就不会再变。要使用可变字符串,可以使用StringBuffer对象,类似于java中的StringBuffer类,它的值是可变的,使用该对象的toString方法可以生成字符串。

var sb = new StringBuffer();

sb.add("Use a StringBuffer");
sb.addAll(["for ", "efficient ", "string ", "creation "]);
sb.add("if you are ").add("building lots of strings.");

var fullString = sb.toString();

print(fullString); // Use a StringBuffer for efficient string creation
                   // if you are building lots of strings.

sb.clear();   

  

2.数字

在Dart中数字有两种类型,int和double,它们都是num的子类,它们提供一系列方法进行运算,另外Math类中提供了num中没有的其它数学运算。

int表示没有小数点的数字:

var x = 1;
var hex = 0xDEADBEEF;
var bigInt = 346534658346524376592384765923476592834765956739847564749587396;
 

而double表示有小数点的数:

var y = 1.1;
var exponents = 1.42e5;
 

 数字与字符串的转换:

// string -> int
var one = Math.parseInt("1");                   // 1

// string -> double
var onePointOne = Math.parseDouble("1.1");      // 1.1

// int -> string
String oneAsString = 1.toString();              // "1"

// double -> string
String piAsString = 3.14159.toStringAsFixed(2); // "3.14"
 


3.布尔类型

Dart只有两种布尔类型:true和false。在javascript中1和非实对象都可以当成true,但是在Dart中不行,在Dart中只有当变量等于true时才会当成true对待,否则当成false对待。

var name = 'Bob';
if (name) {
  print("You have a name!"); // Prints in JavaScript, not in Dart
}
 

 

 在上面的示例中,Dart不会打印任何内容,因为name!=true.

所在,不能直接使用if (nonboolean_value )这样的方式来判断一个对象,要显示地检查对象的值:

// Check for an empty string.
var fullName = '';
if (fullName.isEmpty()) {
  print("Please enter a full name");
}

// Check for zero.
var hitPoints = 0;
if (hitPoints == 0) {
  print("Uh oh! Looks like you died.");
}

// Check for null.
var unicorn = null;
if (unicorn == null) {
  print("You didn't wish hard enough. Wish harder.");
}

// Check for NaN.
var iMeantToDoThis = 0/0;
if (iMeantToDoThis.isNaN()) {
  print("0/0 is not a number.");
}
 

 

4.数组

在Dart中数组也叫列表list.

定义一个数组:

var list = [1,2,3];
 

 

 操作数组:

var list = [1,2,3];
print(list.length); // the # of elements: 3
print(list[1]);     // the second item: 2
 

 

 给数组添加元素:

var list = [1,2,3];
list.add(4);
 

 

 从数组中删除一定范围内的元素:

var list = [1,2,3,4];
list.removeRange(2, 1); // remove the third element
 

 

 创建固定长度的数组:

var list = new List(3); //fixed-size list (full of null values)
 

 

注意:固定长度的数组不能调用add,removeRange等方法改变其大小。


可以使用for , for ...in , 或forEach()几种方式遍历数组,

使用for:

var list = [1,2,3];
for (var x = 0; x < list.length; x++) {
  print('$x: ${list[x]}');
}
 

 

 for...in:

var list = [1,2,3];
for (final x in list) {
  print(x);
}
 

 

 forEach():

var list = [1,2,3];
void printElement(element) => print(element);
list.forEach(printElement);
 

 

 可更简洁的方式:

var list = [1,2,3];
list.forEach((element) => print(element));
 

 

 list的父类是Collection,它提供了一系列操作集合的方法。


5.映射

即Map对象,定义一个map对象可以使用如下方式:

var gifts = {                         // a map literal
// keys       values
  "first"  : "partridge",
  "second" : "turtledoves",
  "fifth"  : "golden rings"};
 

 

 使用这种方式,key只能使用字符串,如果使用Map构造函数,则key可以使用其他类型,如:

var map = new Map();                  // use a Map constructor
map[1] = "partridge";                 // key is 1; value is "partridge"
map[2] = "turtledoves";               // key is 2; value is "turtledoves"
map[5] = "golden rings";              // key is 5; value is "golden rings"
 

 

 在map中值可以是任何对象或null,也可以像javascript中那样直接给map添加一个映射项:

var gifts = { "first": "partridge" };
gifts["fourth"] = "calling birds";    // add a key-value pair
 

 

 取得一个映射项的值:

var gifts = { "first": "partridge" };
print(gifts['first']);                // partridge
 

 

 如果map不存在某个key,则获取该key对应的值会返回null

map中也提供length方法返回映射的项数,remove方法可以删除一个项

Map.from()方法可以复制一个映射:

var gifts = { "first": "partridge" };
var regifts = new Map.from(gifts);
print(regifts['first']); 
 

 

 使用forEach()方法可以遍历一个Map:

var gifts = {
  "first" : "partridge",
  "second": "turtledoves",
  "fifth" : "golden rings"};
gifts.forEach((k,v) => print('$k : $v'));
 

 

如果只想获取所有key或所有values,可以使用getKeys或getValues方法。


四.函数

定义一个函数:

String say(String from, String msg) => "$from says $msg";
 

 

也可以使用简洁的写法:

say(from, msg) => "$from says $msg";
 

 

 调用它:

print(say("Bob", "Hello")); // "Bob says Hello"
 

 

 => e;是{return e;}的简写,因此上面的函数定义相当于:

say(from, msg) {
  return "$from says $msg";
}
 

 

 函数还支持可选参数:

String say(String from, String msg, [String device]) {
  var result = "$from says $msg";
  if (device != null) {
    result = "$result with a $device";
  }
  return result;
}
 

 

可选参数在调用时可以传入也可不传入,比较下面两种调用方式:

print(say("Bob", "Howdy")); // Bob says Howdy
print(say("Bob", "Howdy", "smoke signal"));
// Bob says Howdy with a smoke signal
 

 

可以为可选参数设置默认值,这样在调用时如果没有传入则使用默认值:

String say(String from, String msg, [String device='carrier pigeon']) {
  var result = "$from says $msg";
  if (device != null) {
    result = "$result with a $device";
  }
  return result;
}
 

 

 

 也可以使用名称参数来使用可选参数:

print(say("Bob", "Howdy", device: "tin can and string"));
// Bob says Howdy with a tin can and string
 

 

 函数也可以像对象一样作为函数返回值或作为参数传递给其它函数:

bool isOdd(num i) => i % 2 == 1;
List ages = [1,4,5,7,10,14,21];
List oddAges = ages.filter(isOdd);
 

 

 

五.控制流程

if and else:

if (isRaining()) {
  you.bringRainCoat();
} else if (isSnowing()) {
  you.wearJacket();
} else {
  car.putTopDown();
}
 

 


 for loops:

for (int i = 0; i < candidates.length; i++) {
  candidates[i].interview();
}
 

 

 

在for循环中还可以定义函数来对当前索引值进行操作,如:

main() {
  var callbacks = [];
  for (var i = 0; i < 2; i++) {
    callbacks.add(() => print(i));
  }
  callbacks.forEach((c) => c());
}
 

 


while和do while循环与javascript中一样,break,continue中也一样。


switch使用==来判断对象是否相等。



六异常

Dart中提供了Exception接口来供你实现自定义异常,也提供了一些内置异常类。

也可以把任何对象当异常抛出:

throw new IllegalArgumentException('Value must be greater than zero');
throw "Out of llamas!";
 

 

 使用catch可以捕获指定异常:

try {
  breedMoreLlamas();
} catch (final OutOfLlamasException e) {
  buyMoreLlamas();
}
 

 

catch不同的异常,分别处理:

try {
  breedMoreLlamas();
} catch (final OutOfLlamasException e) {  // a specific exception
  buyMoreLlamas();
} catch (final Exception e) {             // anything that is an exception
  print("Unknown exception: $e");
} catch (final e) {                       // no specified type, handles all
  print("Something really unknown: $e");
}
 

 

 一个catch里也可以捕获多个异常:

try {
  breedMoreLlamas();
} catch (final OutOfLlamasException oole,
        final NoFemaleLlamasException nfle) {
  print('Out of luck');
}
 

 

 像java一样,可以使用finally来执行必须执行的代码:

try {
  breedMoreLlamas();
} catch (final e) {
  print("Error: $e");  // handle exception first
} finally {
  cleanLlamaStalls();  // then run finally
}
 

 

 


分享到:
评论
2 楼 liusu 2013-08-16  
可以说是使用Ruby风格的带函数式编程的Java语言吗?
1 楼 ppjava 2012-06-06  
和Java很像

相关推荐

    Dart语言中文教程.pdf

    ### Dart语言知识点详解 #### 一、Dart简介与特性 **Dart语言**是由Google设计的一款面向对象的编程语言,旨在提供高效、简洁且安全的编程体验。它支持多种编程范式,如面向对象、命令式以及函数式编程。Dart语言...

    Dart语言中文教程1

    Dart 是一种面向对象的、现代的、强类型的编程语言,由 Google 开发,主要用于构建 Web、移动和服务器端的应用程序。本教程将带你逐步了解 Dart 的主要特性,包括变量、运算符、类、库以及异步编程。 1. **变量**:...

    dart语言概览和实践.pdf

    Dart语言是Google开发的一种强类型、面向对象的编程语言,同时也是Flutter框架的开发语言。Flutter是一个开源的移动应用开发框架,它允许开发者使用一套代码库来创建编译到iOS和Android平台的原生性能应用。 在Dart...

    Dart编程语言.7z

    Dart语言自2011年发布以来,已经在开发社区中获得了广泛的认可,尤其在Flutter框架的推动下,Dart在移动应用开发领域的重要性日益凸显。 在《Dart编程语言》这本书中,作者深入浅出地讲解了Dart的核心概念和技术,...

    Dart语言程序设计(英文版)

    **Dart语言程序设计(英文版)** Dart是由Google开发的一种高级、面向对象的编程语言,旨在提高Web和移动应用程序的开发效率。它是一种强类型、单继承的语言,但支持接口和混合类来实现多态性。Dart的设计目标是提供...

    Flutter编程指南之Dart语言:移动开发语言

    第1章 Dart语言概述:Dart语言简介、Dart语言支持平台开发、Flutter为什么选择Dart语言。 第2章 开发环境搭建:下载Dart SDK、Windows下安装Dart SDK、macOS下安装Dart SDK、Visual Studio Code开发工具、IntelliJ ...

    Dart By Example

    1. **Dart语言简介**: - **语言特点**:Dart是一种高性能、可扩展的编程语言,旨在为Web和移动应用提供快速、安全的解决方案。 - **发展历程**:Dart最初由Google在2011年发布,经过多年的迭代和发展,已经成为了...

    Dart基础教程PDF,免费下载,给个好评,谢谢!

    【Dart语言基础】 Dart是一种由Google开发的高级编程语言,主要应用于构建高性能的Web应用、移动应用(特别是与Flutter框架配合)以及服务器端应用。它的设计目标是提供高效、安全的开发体验,结合了静态类型和动态...

    Dart语言详解.pptx

    flutter dart 基础flutter dart 基础

    Dart 语言运行库

    5. **Flutter框架**:Dart语言最著名的应用是Flutter,这是一个用于构建高性能、高保真度的移动、Web和桌面应用的开源UI工具包。Flutter使用Dart作为其主要编程语言,提供了一套丰富的组件库和热重载功能,极大地...

    Dart-203.8292.zip

    **Dart语言简介** Dart是由Google开发的一种面向对象的、高性能的编程语言,设计目标是提高开发者的生产力,提供流畅的编码体验。Dart支持单线程模型和异步编程,拥有强类型系统和垃圾回收机制,使得开发者可以编写...

    Google正式推出Dart语言,欲将Javascript赶下神坛.docx

    Dart语言概述 Dart语言是Google近日推出的结构化网页编程语言,旨在撼动Javascript网页编程统治地位。Dart语言是一款21世纪产品,其设计完美适应现代浏览器和移动设备,无论平板电脑还是服务器Dart都具有良好表现。...

    Dart语言 Tutorial教程 样例程序

    Dart语言是一种由Google开发的开放源代码编程语言,主要用于构建高性能的Web、移动和服务器应用程序。这个"dart语言 Tutorial教程 样例程序"是学习Dart编程的理想资源,特别是对于初学者来说,它提供了一个逐步指导...

    Dart语言入门

    This page shows you how to use each major Dart feature, from variables and operators to classes and libraries, with the assumption that you already know how to program in another language. To learn ...

    Dart 语言导览

    这是学习Dart语言的第一手材料!在这里您将看到 Dart 各项主要功能的用法,包括变量、运算符、类、库等。本文假定您已经了解如何用其他语言编程。决定权威,不容错过!

Global site tag (gtag.js) - Google Analytics