1.本文主要讲一下Dart中的方法是怎么定义的,下面先看一个简单的例子:

void printNumber(num number) {
print('The number is $number.');
}

2.虽然Dart的编程规范推荐定义方法是要明确变量类型,但其实上面的代码我们完全可以写作:

printNumber(number) { // Omitting types is OK.
print('The number is $number.');
}

本人建议还是使用第一种吧,代码的可读性比较强。

3.如果方法的方法体只有一个表达式,如上面这段代码,可以写成:

void printNumber(num number) =>
print('The number is $number.');

这样是不是很高大上呢?有种lambda表达式的感觉。这里需要注意的是当方法体是一个声明语句的时候就不能这样使用了,如下面这段代码就无法使用这种简写:

printNumber(number) { // Omitting types is OK.
var N = number * 2 ;
}

4.Dart中方法的定义也十分简单:

printNumber(2333);

5.Dart方法的参数有两种类型,必须参数和可选参数,其中必须参数定义在参数列表的前面部分,可选参数定义在参数列表的剩余部分。

可选参数

可选参数又可以分为:可选命名参数可选位置参数。同一个参数只能是可选命名参数或可选位置参数,不能兼具两者的功能。

同时可选参数可以设定默认值,如没有设定默认值则相当于null。

可选命名参数

可选命名参数顾名思义,就是在给其赋值的时候通过参数名来赋值。

可选命名参数使用{param1, param2, …}这种形式定义,如下:

enableFlags({bool bold:false, bool hidden:true}) {
// ...
}

可选命名参数使用:设置默认值。

可选命名参数的调用方式如下:

enableFlags(bold: true, hidden: false);

可选位置参数

可选位置参数与可选命名参数类似,不过它是通过位置来赋值的。

可选位置参数使用[]包裹可选位置参数列表,与可选命名参数不同的是可选位置参数通过=来设置默认值:

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

需要注意的是在调用包含可选位置参数的方法时,一定要根据可选位置参数的位置进行赋值。

main方法

在Dart中所有的程序都必须包含main方法来作为程序的入口。main方法的返回值是void并且它有一个List类型的可选参数。下面是Dart在Web应用中的主函数写法:

void main() {
querySelector("#sample_text_id")
..text = "Click me!"
..onClick.listen(reverseText);
}
注意:..操作符可以用于对单个对象进行多重操作。

下面这个例子是Dart在命令行程序中的使用范例:

void main(List<String> arguments) {
print(arguments); assert(arguments.length == 2);
assert(int.parse(arguments[0]) == 1);
assert(arguments[1] == 'test');
}

方法即对象

在Dart中你可以将方法作为参数传递给另一个方法:

printElement(element) {
print(element);
} var list = [1, 2, 3]; // Pass printElement as a parameter.
list.forEach(printElement);

同样的,可以将方法赋值给一个变量:

var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
assert(loudify('hello') == '!!! HELLO !!!');

语法范围

在Dart中方法可以嵌套,并且内层方法可以访问外层方法定义的变量:

var topLevel = true;

main() {
var insideMain = true; myFunction() {
var insideFunction = true; nestedFunction() {
var insideNestedFunction = true; assert(topLevel);
assert(insideMain);
assert(insideFunction);
assert(insideNestedFunction);
}
}
}

语法闭包

闭包的作用是即使方法在原先声明范围外使用,方法内部的变量都是可访问的:

Function makeAdder(num addBy) {
return (num i) => addBy + i;
} main() {
// 创建一个+2方法.
var add2 = makeAdder(2); // 创建一个+4方法.
var add4 = makeAdder(4); assert(add2(3) == 5);
assert(add4(3) == 7);
}

在上面这段代码中,add2,add4这两个方法在main方法中使用,但他们却可以访问addBy 这个变量。这就是语法闭包的意思。

方法的等价判断

下面这个例子用于展示顶层方法,静态方法和类成员方法(实例方法)的等效判断:

foo() {}               // A top-level function

class SomeClass {
static void bar() {} // A static method
void baz() {} // An instance method
} main() {
var x; // Comparing top-level functions.
x = foo;
assert(foo == x); // Comparing static methods.
x = A.bar;
assert(A.bar == x); // Comparing instance methods.
var v = new A(); // Instance #1 of A
var w = new A(); // Instance #2 of A
var y = w;
x = w.baz; // These closures refer to the same instance (#2),
// so they're equal.
assert(y.baz == x); // These closures refer to different instances,
// so they're unequal.
assert(v.baz != w.baz);
}

返回值

所有的Dart方法都有返回值,若在代码中没有返,则返回值为null。

Dart的方法基本使用就讲到这里,更多的Dart学习内容和相关源码都会在github上的DartNovel开源项目进行同步,欢迎关注。

Dart基础学习03--方法的使用的更多相关文章

  1. Dart基础学习02--变量及内置类型

    Dart基础学习02--变量及内置类型 Dart中的变量 首先看一个变量的定义和赋值 var name = 'Bob'; 在Dart中变量名都是引用,这里的name就是一个指向值为Bob的字符串的引用 ...

  2. Dart基础学习01--走近Dart

    什么是Dart 在Dart的官网上是这样介绍Dart的: Dart is an open-source, scalable programming language, with robust libr ...

  3. java基础学习03(java基础程序设计)

    java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...

  4. 分享零基础学习Hadoop方法

    (我不是Hadoop专家,也只是一个初学者,这里我也只是就自己的学习体会,站在初学者的角度谈一下如何入门.) 首先我觉得应该思考这样一个问题:Hadoop对于我们来讲,是一种工具,那么Hadoop帮助 ...

  5. T-SQL 基础学习 03

    局部变量 在T-SQL中,局部变量的名称必须以标记@作为前缀 语法 DECLARE @变量名数据类型 局部变量的赋值 方法一 SET @变量名 = 值 方法二 SELECT @变量名 = 值 SET和 ...

  6. Java基础学习(一)—方法

    一.方法的定义及格式 定义: 方法就是完成特定功能的代码块. 格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2){ 函数体; return 返回值; } 范例1: 写一个两个 ...

  7. c语言基础学习03

    =============================================================================涉及到的知识点有:编码风格.c语言的数据类型. ...

  8. java基础学习总结——方法的重载(overload)

    一.方法的重载 方法名一样,但参数不一样,这就是重载(overload). 所谓的参数不一样,主要有两点:第一是参数的个数不一样,第二是参数的类型不一样.只要这两方面有其中的一方面不一样就可以构成方法 ...

  9. Python基础学习----公共方法及运算符

    # 公共方法:在python高级数据类型通用的方法 # 常见的:max() min() len() del() # 列表 list=[1,2,3] print(len(list)) print(min ...

随机推荐

  1. 扩展方法 DataTable的ToList<T>

    using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.T ...

  2. 【学习笔记】C#中的单元测试

    周一老师讲完单元测试以后,感觉挺好玩,通过查资料和相关书籍学到了几种C#在VS2010的测试方法,跟大家分享下,图文并茂啊,有木有~~ 1.从被测试的代码中生成单元测试 1.1创建C#控制台程序,命名 ...

  3. 在centos 5.11上安装pylint

    上午花了两三个小时在折腾pylint的安装. 如果是普通的linux倒也简单,只用运行一个pip install pylint就行了. 可是偏偏那么巧,服务器的版本是centos 5.11 这个版本对 ...

  4. Garbage First(G1)垃圾收集器

    1. 概述 G1(Garbage First)垃圾收集器是当今垃圾回收技术最前沿的成果之一.早在JDK7就已加入JVM的收集器大家庭中,成为HotSpot重点发展的垃圾回收技术.同优秀的CMS垃圾回收 ...

  5. atitit.企业管理----商业间谍策略的使用与防务

    atitit.企业管理----商业间谍策略的使用与防务 1. 间谍的历史 2 1.1. 公元前10世纪,<旧约全书>中的<士师记>里讲述了参孙的故事是最早的间谍故事. 2 1. ...

  6. Atitit.软件开发的几大规则,法则,与原则p821.doc

    Atitit.软件开发的几大规则,法则,与原则p821.doc 1. 设计模式六大原则2 1.1. 设计模式六大原则(1):单一职责原则2 1.2. 设计模式六大原则(2):里氏替换原则2 1.3.  ...

  7. HTML5 多图上传

    HTML5 多图上传 时间 2014-06-05 16:06:29  月小升博客 原文  http://java-er.com/blog/html5-many-image-upload/ 主题 HTM ...

  8. jdk8 StreamApi

    List<User> userList=new ArrayList<>(); userList.add(User.builder().age().name()).build() ...

  9. Java 调用 C/C++ 之 JNA 系列实战篇 —— 输出char * (六)

    一. 工作环境 1. windows (64位), JDK (64位),dll文件 (64位) 2. Linux (64位),      JDK (64位),so文件 (64位) 3. JNA的官方资 ...

  10. javascript立刻执行函数

    一般常见的立刻执行函数推荐如下两种: (function(a){ console.log(a); })("kk"); (function(a){ console.log(a) }( ...