dart调⽤python_Dart学习笔记(⼀)
⼀个基本的Dart程序
下⾯的代码中使⽤了很多Dart最基本的特性:
// 定义⼀个函数
printInteger(int aNumber) {
print('The number is $aNumber.');
// 输出到控制台。
}
// 和多数语⾔⼀样,main()是程序开始运⾏的⼊⼝。
main() {
var number = 32;
/
/ 声明和初始化⼀个变量。
printInteger(number);
// 调⽤上⾯定义的函数。
}
重要概念
所有你能够赋值给⼀个变量的都是⼀个对象,⽽每个对象都是类的⼀个实例。甚⾄是数字、函数还有null值都是对象。所有对象都源于⼀个公共⽗类Object。
虽然Dart是强类型语⾔,但是类型声明是可选项(即不是必须的),因为Dart可以⾃⼰去推断类型。在上⾯的代码中,变量number就被推断为int类型。当你想明确说没有类型时,可以使⽤特殊类dynamic。
Dart⽀持泛型,像List,⼀个整数列表。
Dart⽀持顶层函数,如main(),以及与类绑定的函数(静态⽅法),还有与对象绑定的函数(实例⽅法)。甚⾄可以在函数中创建函数(嵌套函数或局部函数)。
同样,Dart⽀持顶级变量、静态变量和实例变量。实例变量即对象的属性。
和Java不同的是,Dart没有public、protected和private的关键字。如果⼀个变量名以下划线“_”开头,说明它是私有变量。
变量名要以字母或者下划线开头。
关键字
待补充。
变量
以下是声明变量并初始化的⽰例:
var name = 'yzune';
以上的声明没有明确指定变量是什么类型的,由Dart去推断。当然也可以显式地指定变量类型,像下⾯这样⼦:
String name = 'yzune';
默认值
未初始化的变量初始值为null,哪怕对于int类型的变量也是如此。这点跟Java不太⼀样。
final和const
如果你不打算修改⼀个变量,那么可以在声明的时候使⽤final或const。⼀个final变量只能被赋值⼀次;⼀个const变量等同于编译时常量(声明为const也意味着是final变量)。
注意:类的属性可以是final,但不可以是const。
声明final变量的⽰例:
final name = 'yzune';
// 可以不需要指明类型。
// name = 'yzune';
// 但上⾯这种就不⾏,因为没有final的关键字。
final String nickname = 'yz';
// 也可以去指明类型。
使⽤const可以声明⼀些常量。如果是在定义⼀个类的成员变量时使⽤const,应该使⽤static const进⾏声明。声明const⽰例:
const c = 300000000;
// 光速,单位为m/s。
const light_year = c * 365 * 24 * 60 * 60;
// 光年,单位为m。
内置类型
Dart语⾔对以下类型有着特别的⽀持(就是内置了的意思):
numbers
strings
booleans
lists(arrays)
maps
runes(⽤于在字符串中表⽰Unicode字符)
symbols
你可以⽤字⾯值来初始化任何以上这些特殊类型的对象。⽐如,'this is a string'就是⼀个字符串类型字⾯值,true就是⼀个布尔类型字⾯值。
因为Dart中的每个变量都指向⼀个对象,也就是⼀个类的实例,所以你通常可以使⽤类的构造函数来初始化变量。⼀些内置类型有⾃⼰的构造函数。⽐如,可以使⽤Map类型的构造函数Map()来创建Map对象:new Map()。
Numbers
Dart中有两种数字类型:int和double。这两种类型都是num类的⼦类,num类包含了基本的运算,⽐如四则运算,还有像abs()、ceil()和floor()这些⽅法。按位运算是在int类中定义的。如果num类和它的⼦类中没有你想使⽤的⽅法,可以引⼊dart:math库,⾥⾯有更多的数学运算⽅法,⽐如三⾓函数。
int
整数值不⼤于64位,具体取决于平台。在Dart虚拟机上,int的范围为- 2^(63) ~ 2^(63) - 1。如果是将Dart编译为JavaScript,则使⽤JavaScript对应的类型,范围是- 2^(53) ~ 2^(53) - 1。
double
64位(双精度)浮点数,符合IEEE 754标准。
字符串类型和数字类型相互转换
// String -> int
var one = int.parse('1');
// String -> double
var onePointOne = double.parse('1.1');
// int -> String
String oneAsString = 1.toString();
// double -> String
String piAsString = StringAsFixed(2);
// piAsString的值会是'3.14',在转换时指定了保留两位⼩数。
Strings
python虚拟机你可以使⽤单引号或者双引号来创建字符串。
你可以在字符串中通过使⽤ ${表达式} 来置⼊⼀个表达式的值。如果这个表达式本⾝就是⼀个变量,那么可以不⽤添加{}。为了得到表达式的字符串结果,Dart会调⽤返回对象的toString()⽅法。
var s = 'string';
assert('Dart的$s还能这样⽤。' == 'Dart的string还能这样⽤。');
assert('Dart的${s.toUpperCase()}还能这样⽤。' == 'Dart的STRING还能这样⽤。');
注意:==操作符⽤来测试两个对象是否相等。如果两个字符串包含相同的字符序列,那它们就是相等的。这个跟Java也不⼀样。
连接字符串的⽅式有两种,⼀种是将要连接的字符串相邻并排;另⼀种是使⽤+来连接。
var s1 = '字符串' '可以这样'
'来连接。';
var s2 = '也可以' + '这样⼦来连接。';
若要表⽰多⾏字符串,跟Python相似,可以使⽤成对的三个单引号或成对的三个双引号。
var s = '''
这是
多⾏
字符串
''';
让转义字符不发⽣转义,即显⽰原始字符串,在引号前加上前缀r即可。
var s = r'这是原始字符串,\n不会被显⽰为换⾏符。';
Booleans
为了表⽰布尔值,Dart有bool类型。bool类型只有两个对象:布尔字⾯值true和false,它们都是编译时常量。
Dart的类型安全意味着你不能使⽤类似if (⾮布尔值)或assert (⾮布尔值)这样⼦的代码。规范的代码应该如下:
// Check for an empty string.
var fullName = '';
assert(fullName.isEmpty);
// Check for zero.
var hitPoints = 0;
assert(hitPoints <= 0);
// Check for null.
var unicorn;
assert(unicorn == null);
// Check for NaN.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);
Lists
⼏乎所有编程语⾔中最常见的集合,可能是数组或者是有序对象组。在Dart中,数组是List对象,所有我们可以把它们统称为列表。
这是⼀个简单的Dart列表:
var list = [1, 2, 3];
注意:以上代码中,Dart推断list的类型为List。如果尝试将⾮整数对象添加到这个列表中,会引发错误。
Maps
⼀般来说,Map是将键和值相关联的对象。键和值都可以是任何类型的对象。每个键都应该是唯⼀的,只能出现⼀次。Dart⽀持使⽤Map 字⾯值或者map类型来创建Map。
以下是使⽤Map字⾯值创建map的例⼦:
var skills = {
1: 'Java',
2: 'Python',
3: 'Dart'
};
注意:以上代码中,Dart推断skills的类型为Map。如果尝试将错误类型的值添加到这个Map中,会引
发错误。
还可以使⽤Map的构造函数来得到相同的效果:
var skills = new Map();
skills[1] = 'Java';
skills[2] = 'Python';
skills[3] = 'Dart';
也可以将新的键值对添加到现有的Map中:
skills[4] = 'C#';
通过skills[键]的⽅法来访问其中的值,如果其中没有这个键,将会返回null。使⽤skills.length会得到键值对的个数。
函数
Dart是⼀种真正的⾯向对象的语⾔,所以即使是函数也是对象,并且有⼀个类型Function。这意味着函数可以分配给变量或作为参数传递给其他函数。你也可以像调⽤⼀个函数⼀样调⽤⼀个类的实例。
下⾯是⼀个实现函数的实例:
bool haveSkills(String skill){
return ains(skill);
}
对于只包含⼀个表达式的函数,可以使⽤简写语法:
bool haveSkills(String skill) => ains(skill);
函数可以有两种类型的参数:必需的和可选的。⾸先列出必需的参数,再列出任何可选参数。
可选参数
可选参数可以是位置型或命名型的,但不能同时是它们。
可选的命名参数
在定义函数的时候,⽤{参数1, 参数2, …}来指定命名参数。这样在调⽤函数时,可以使⽤参数的名称来指定输⼊的是哪个参数(顺序不同也没关系)。没有输⼊的参数在函数中被当成null。⽰例:
void my_print({String name, String age}){
print("年龄为$age的$name。");
}
main() {
my_print(age: '21', name: 'yz');
// 参数的位置可以任意,因为已经由名称去指定了。
}
可选的位置参数
将函数的参数放在[]中,将它们标记为可选的位置参数:
String say(String from, String msg, [String device]) {
var result = '$from说$msg。';
if (device != null) {
result = '$from通过$device说$msg。';
}
return result;
}
main() {
print(say('杨增', '你好'));

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。