Dart语言学习

 

首先贴下文档地址:

https://book.flutterchina.club/chapter1/dart.html

 

一:变量声明

      1.1Variables

          var 可以接收任意类型的变量,但是无法改变变量类型。如: 

var name = 'Bob';

执行下面这个赋值时会报错
name=100;

    2:dynamicObject   

     所有能够使用变量引用的都是对象, 每个对象都是一个的实例。在 Dart 中 甚至连 数字、方法和 null 都是对象。所有的对象都继承于Oject类。

   dynamic声明的变量可以赋值任意对象。

 dynamic t= "hello world";
 Object  x= 'Hello world';
 t = 1;
 x = 1;

 3:Final and const

   final 变量只能赋值一次;const 为编译时变量。 

final string name ='';
const string avatar='';

final 和const 修饰的变量可省略变量类型,即
final name ='';
const avatar='';

   4:Numbers(数值)

     num 下有两种数值类型int和double 。

     num 类型定义了基本的操作符,例如 +, -, /, 和 *, 还定义了 abs() ceil()、和 floor() 等 函数。

     int 类型支持位移操作。

assert((3 << 1) == 6);  // 0011 << 1 == 0110
assert((3 >> 1) == 1);  // 0011 >> 1 == 0001

   assert (断言)如果条件表达式结果不满足需要,则可以使用 assert 语句俩打断代码的执行、

5:string 字符串

   Dart 字符串是 UTF-16 编码的字符序列。 可以使用单引号或者双引号来创建字符串:

var name ='max';
var avatar="xxx";

  string 可通过‘+’ 连接,也可以直接去掉。

var avatar ='http'+'://'+'www.baidu.com';
var user='my' 'name' 'is';

  可以在字符串中使用表达式 ${expression}

var name ='max';
 
assert("my name is $name"=="my name is max");
== 操作符判断两个对象的内容是否一样。 如果两个字符串包含一样的字符编码序列, 则他们是相等的。

  6:Lists(列表)

var list = [1, 2, 3];

   在 list 字面量之前添加 const 关键字,可以 定义一个不变的 list 对象(编译时常量):

const list = const [1, 2, 3];
list[1] = 1; 

I/flutter ( 1826): The following UnsupportedError was thrown while handling a gesture:
I/flutter ( 1826): Unsupported operation: Cannot modify an unmodifiable list
I/flutter ( 1826): When the exception was thrown, this was the stack:
I/flutter ( 1826): #0      UnmodifiableListBase.[]= (dart:_internal/list.dart:90:5)
I/flutter ( 1826): #1      _MyHomePageState._incrementCounter.<anonymous closure> (package:flutter_dart_demo/main.dart:60:11)
I/flutter ( 1826): #2      State.setState (package:flutter/src/widgets/framework.dart:1130:30)
I/flutter ( 1826): #3      _MyHomePageState._incrementCounter (package:flutter_dart_demo/main.dart:51:5)
I/flutter ( 1826): #4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
I/flutter ( 1826): #5      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
I/flutter ( 1826): #6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
I/flutter ( 1826): #7      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
I/flutter ( 1826): #8      TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:204:7)
I/flutter ( 1826): #9      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
I/flutter ( 1826): #10     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:184:20)
I/flutter ( 1826): #11     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
I/flutter ( 1826): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
I/flutter ( 1826): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
I/flutter ( 1826): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
I/flutter ( 1826): #15     _invoke1 (dart:ui/hooks.dart:168:13)
I/flutter ( 1826): #16     _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)

二:函数

       方法可以赋值给变量,也可以当做其他方法的参数。 也可以把 Dart 类的实例当做方法来调用。

     2.1函数定义

bool isNoble(int atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

     当然还可以忽略返回类型,但是不指定返回类型后,dart语言默认为dynamic,就不是bool类型。

//不指定返回类型,此时默认为dynamic,不是bool
isNoble(int atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

  2.2 缩写语法

    对于只包含一个表达式的函数,可以使用简写语法

bool isNoble (int atomicNumber )=> _nobleGases [ atomicNumber ] != null ;

    在箭头 (=>) 和冒号 (;) 之间只能使用一个 表达式 – 不能使用 语句。 例如:你不能使用if statement,但是可以 使用条件表达式

   2.3Optional parameters可选参数

      可选参数只能在任何必需的参数之后声明。

      可选参数可以有一个默认值,当默认值在调用者没有指定值时使用。

      可选参数分为可选位置参数和可选命名参数。

    2.3.1可选命名参数

      在定义方法的时候,使用 {param1param2, …} 的形式来指定命名参数:

getHttpUrl({String server,int port}) {
  // ...
}

   调用方法的时候,你可以使用这种形式 paramNamevalue 来指定命名参数。例如: 

getHttpUrl(server:"example.com",port:8080);

   2.3.2可选位置参数

    把一些方法的参数放到 [] 中就变成可选 位置参数了:

getHttpUrl(string server,string path,[int port=8080]) {
  // ...
}

调用时有两种方式:

 第一种是不带位置参数的:

getHttpUrl("example.com","/user");//port 为8080

第二种是带位置参数的:

getHttpUrl("example.com","/user",8081);

2.4方法作为参数 

  可以把方法当做参数调用另外一个方法。例如:

myPrint(element) {
  print(element);
}

var list = [1, 2, 3];

list.forEach(myPrint);

还可以把方法赋值给变量如:

//定义变量
var myPrint= (str){
  print(str);
};

myPrint("hi world");

 2.5匿名方法

    匿名方法又叫lambda或者closure 闭包。

    定义:

([[Type] param1[, …]]) { 
  codeBlock; 
}; 

可赋值给变量,通过变量进行调用

可在其他方法中直接调用或传递给其他方法
如:

var func = (str) {
    print("Hello-------$str");
  };

func("zh");


var list = ['h', 'l', 'l', 'e', 'o'];
list.forEach((i) {
  print(list.indexOf(i).toString() + ': ' + i);
});

   

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值