0
点赞
收藏
分享

微信扫一扫

Dart基础——常见数据类型与函数

古月无语 2022-01-14 阅读 38
flutter

函数

声明方式与OC类似。只是标注形参类型时不需要加 *,每句话写完,要加 ;

void thisIsDartFunction(int parma) {
	print('hello dart');
}

参数类型:

  • 必填参数
  • 可选参数
    写在必填参数后面
    用中括号包裹起来
    带默认值的可选参数
  • 命名参数
    用大括号包裹起来
    调用时参数名称与声明函数中的名称保持一致
  • 函数参数
// 必填
String user1(String name) {
}
// 可选 dynamic动态,不用赋值
String user2(String name, [dynamic age]) {
}

String user3(String name, [int age = 10]) {
}
// 命名参数
String user4(String name, {int age = 10}) {
}

void main() {
	user1('1');
	user2('2', 18);
	user3('3', 18);
	user4('4', age: 18);	
}

异步函数

import 'dart:convert';

import 'package:http/http.dart' as http;
import 'dart:convert';

// Future getIPAddress() {
//   final url = 'https://httpbin.org/ip';
//   return http.get(url).then((response) {
//     print(response.body);
//   });
// }

Future getIPAddress() async {
  final url = 'https://httpbin.org/ip';
  final res = await http.get(url);
  String ip = jsonDecode(res.body)['origin'];
  return ip;
}
// void main() {
//   getIPAddress()
//       .then((value) => print(value))
//       .catchError((error) => print(error));
// }

void main() async {
  try {
    final ip = await getIPAddress();
    print(ip);
  } catch (err) {
    print(err);
  }
}

变量

声明方式与swift和oc都有类似。使用var表示变量是可变的,也可字面量直接显式声明变量数据类型。

void thisIsDartFunction(int parma) {
	var page = 0;
	print('read to $page');
}
  • 明确执行类型:int age = 11;
  • 隐式声明类型:var age = 11; 或者 dynamic age = 11;
  • 变量名是大小写敏感的。age与Age是两个变量
  • 变量默认值是null(js中变量默认值是undefined)
  • dart变量的值不会进行隐式类型转换(从int转为string)

常量

  • 声明常量:
  1. const age = 11;
  2. final age = 11;

数据类型

Number、String、List、Boolean、Set、Map、其它

  • Number

    int count = 3;
    double price = 11.1;
    // num类型,包含int和double类型
    num x = 1.11;
    print(x.toString());  //  1.11
    print(1.11.toInt());  //  1
    // 四舍五入
    print(1.23456.round());  //  1
    print(1.23456.toStringAsFixed(4));  //  1.2346
    // 取余
    print(10.remainder(4));  // 2
    // 数字比较: 0相同 1大于 -1小于
    print(10.compareTo(12));  // -1
    // 返回最大公约数
    print(12.gcd(18));	// 6
    // 科学计数法
    print(1000.toStringAsExponential(1));	// 1.0e+3
    // 判断非数字的NaN
    print(x.isNaN);
    
  • String

    • 字符串声明:单引号、双引号、三引号(可带换行符)

    • 常见API:
      https://api.dart.cn/stable/2.13.4/dart-core/String-class.html

    • 正则表达式

    • 常见基础API

      String str1 = 'hello';
      String str2 = " world";
      String str3 = '''hello 
      world''';
      
      print(str1);  // hello
      print(str2);  //  world
      print(str3);  // hello 
      				//world
      
      // 拼接
      print(str1 + str2); // hello world
      // 模板字符串
      print('$str1 $str2'); // hello world
      // 字符串分割 
      str1.split('l'); // [he, o]
      // 字符串裁切(去空格)
      '	space	'.trim(); // space
      // 判断字符串是否为空
      ''.isEmpty; // true
      ''.isNotEmpty; // false
      // 字符串替换
      str1.replaceAll('h', 'H'); // Hello
      // 字符串正则方式替换
      '1a1b1c1d'.replaceAll(RegExp(r'\d+'), ''); // 1111
      // 字符串正则方式匹配
      var isPhone = RegExp(r'^1\d{10}$');
      print(isPhone.hasMatch('13322223333')); // true
      print(isPhone.hasMatch('1332222333')); // false
      // 查找字符串
      str1.contains('l') // true
      // 返回首先匹配到的下标
      str1.indexOf('h') // 0
      
  • Boolean
    布尔类型只有true和false
    对变量判断时,要显式表达布尔值

  • List

    • 常用API
      https://api.dart.cn/stable/2.13.4/dart-core/List-class.html

    • 常见基础API

      // 创建List
      // 字面量方式
      List list = [];
      // 字面量——泛型
      List list = <String>[];
      // 扩展操作符 ...
      var list = [1, 2, 3];
      var list2 = [0, ...list];
      // 构造函数声明 —— 命名参数growable标识空数组是否可变
      var list3 = new List.empty(growable: true);
      list3.add(1); // [1]
      var list4 = new List.filled(3, 6); // [6, 6, 6]
      
      // 扩展
      var list5 = [0, ...list4]; // [0, 6, 6, 6]
      var list6;
      // 先判断后扩展 —— 避免警告
      var list 7 = [0, ...?list6]; // [0]
      // list 长度
      list5.length // 4
      // 得到 list 翻转后的列表
      var list8 = list5.reversed.toList(); // [6, 6, 6, 0]
      // 添加元素
      list5.addAll([9, 3]); // [0, 6, 6, 6, 9, 3]
      // 直接删除元素
      list5.remove(3); // [0, 6, 6, 6]
      // 通过下标删除元素
      list5.removeAt(4); // [0, 6, 6, 6, 3]
      // 插入一个元素
      list5.insert(4, 9); // [0, 6, 6, 6, 9, 3]
      // 插入多个元素
      list5.insert(4, [8, 9]); // [0, 6, 6, 6, 8, 9, 3]
      // list清空
      list5.clear(); // []
      // 合并元素
      List dartList = ['aaa', 'sss'];
      dartList.join('') // aaasss
      
    • List遍历

      • forEach()
        遍历列表
      • map()
        遍历列表并处理元素,生成新的列表并返回
      • where()
        返回满足条件的数据
      • any()
        只要有一项满足条件,返回true
      • every()
        判断是否每一项都满足条件,都满足返回true
      var list1 = [1, 2, 3];
      var list2 = list1.map((element) {
      	return element * element;
      }).toList(); // [1, 4, 9]
      var list3 = list1.map((element) => element * element;).toList(); // [1, 4, 9]
      // 数组的扩展
      int list4 = [[1, 1], [3, 4]];
      var list5 = list4.expand((element) => element).toList(); // [1, 1, 3, 4]
      
      
    • Set

      • 无序的、元素唯一的集合,无法通过下标取值
      • 可以求交集、并集、差集等
      • 常见基础API:
      // 字面量
      var nums = <int>{1, 2, 3};
      var fruits = new Sets();
      fruits.add('apple');
      fruits.add('orange');
      // List转set
      List nums = [1, 1, 3, 2];
      nums.toSet();
      // 求交集
      intersection
      // 求并集
      union
      // 求差集
      difference
      // 返回特定值
      first
      last
      
    • Map

    • 常见基础API

      // 字面量
        var map = {'name': 'Li',
      			   'age': 20};
        // 构造函数
        var p = new Map());
        p['name'] = 'Xie';
        p['age'] = 28;
        
        // 检查Key是否存在
        print(p.containsKey('name'));
        // 当不存在key时,才赋值
        p.putIfAbsent('gender', () => '男');
        // 获取所有key
        print(p.keys);
        // 获取所有value
        print(p.values);
        // 根据条件删除
        p.removeWhere((key, value) => key == 'gender');
      

运行:

举报

相关推荐

0 条评论