当前位置:   article > 正文

Dart语法篇之基础语法(一)_long在dart中定义成什么

long在dart中定义成什么

在这里插入图片描述

简述:

又是一段新的开始,Dart这门语言相信很多人都是通过Flutter这个框架才了解的,因为Flutter相比Dart更被我们所熟知。很多人迟迟不愿尝试Flutter原因大多数是因为学习成本高,显然摆在面前的是需要去重新学习一门新的语言dart,然后再去学习一个开发框架Flutter,再加上很多莫名奇妙的坑,不说多的就从Github上Flutter项目issue数来看坑是着实不少,所以很多人也就望而却步了。当然这个问题是一个新的技术框架刚开始都可能存在的,但我们更需要看到Flutter框架跨平台技术思想先进性。

为什么要开始一系列Dart相关的文章?

很简单,就是为了更好地开发Flutter, 其实开发Flutter使用Dart的核心知识点并不需要太过于全面,有些东西根本用不到,所以该系列文章也将是有选择性选取Dart一些常用技术点讲解。另一方面,读过我文章的小伙伴就知道我是Kotlin的狂热忠实粉, 其实语言都是相通,你可以从Dart身上又能看到Kotlin的身影,所以我上手Dart非常快,可以对比着学习。所以后期Dart文章我会将Dart与Kotlin作为对比讲解,所以如果你学过Kotlin那么恭喜你,上手Dart将会非常快。

该系列Dart文章会讲哪些内容呢?

本系列文章主要会涉及以下内容: dart基本语法、变量常量和类型推导、集合、函数、面向对象的Mixins、泛型、生成器函数、Async和Await、Stream和Future、Isolate和EventLoop以及最后基本介绍下DartVM的工作原理。

一、Hello Dart

这是第一个Hello Dart程序,很多程序入口都是从main函数开始,所以dart也不例外,一起来看下百变的main函数

//main标准写法
void main() {
  print('Hello World!');//注意: Dart和Java一样表达式以分号结尾,写习惯Kotlin的小伙伴需要注意了, 这可能是你从Kotlin转Dart最大不适之一。
}

//dart中void类型,作为函数返回值类型可以省略
main() {
  print('Hello World!');  
}

//如果函数内部只有一个表达式,可以省略大括号,使用"=>"箭头函数; 
//而对于Kotlin则是如果只有一个表达式,可以省略大括号,使用"="连接,类似 fun main(args: Array<String>) = println('Hello World!')
void main() => print('Hello World!');

//最简写形式
main() => print('Hello World!');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

二、数据类型

在dart中的一切皆是对象,包括数字、布尔值、函数等,它们和Java一样都继承于Object, 所以它们的默认值也就是null. 在dart主要有: 布尔类型bool、数字类型num(数字类型又分为int,double,并且两者父类都是num)、字符串类型String、集合类型(List, Set, Map)、Runes类和Symbols类型(后两个用的并不太多)

1、布尔类型(bool)

在dart中和C语言一样都是使用bool来声明一个布尔类型变量或常量,而在Kotlin则是使用Boolean 来声明,但是一致的是它对应的值只有两个true和false.

main() {
    bool isClosed = true;//注意,dart还是和Java类似的 [类型][变量名]方式声明,这个和Kotlin的 [变量名]:[类型]不一样.
    bool isOpened = false;
}
  • 1
  • 2
  • 3
  • 4
2、数字类型(num、int、double)

在dart中num、int、double都是类,然后int、double都继承num抽象类,这点和Kotlin很类似,在Kotlin中Number、Int、Double都是类,然后Int、Double都继承于Number. 注意,但是在dart中没有float, short, long类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LRHtctWL-1572256025795)(/Users/mikyou/Library/Application Support/marktext/images/2019-10-24-22-02-40-image.png)]

main() {
    double pi = 3.141592653;
    int width = 200;
    int height = 300;
    print(width / height);//注意:这里和Kotlin、Java都不一样,两个int类型相除是double类型小数,而不是整除后的整数。
    print(width ~/ height);//注意: 这才是dart整除正确姿势
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

此外和Java、Kotlin一样,dart也拥有一些数字常用的函数:

main() {
    print(3.141592653.toStringAsFixed(3)); //3.142 保留有效数字
    print(6.6.floor());//6向下取整
    print((-6.6).ceil()); //-6 向上取整
    print(9.9.ceil()); //10 向上取整
    print(666.6.round()); //667 四舍五入
    print((-666.6).abs()); // 666.6 取绝对值
    print(666.6.toInt()); //666 转化成int,这中toInt、toDouble和Kotlin类似
    print(999.isEven); //false 是否是偶数
    print(999.isOdd); //true 是否是奇数
    print(666.6.toString()); //666.6 转化成字符串
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
3、字符串类型(String)

在Dart中支持单引号、双引号、三引号以及$字符串模板用法和Kotlin是一模一样的。

main() {
    String name = 'Hello Dart!';//单引号
    String title = "'Hello Dart!'";//双引号
    String description = """
          Hello Dart! Hello Dart!
          Hello Dart!
          Hello Dart! Hello Dart!
    """;//三引号
    num value = 2;
    String result = "The result is $value";//单值引用
    num width = 200;
    num height = 300;
    String square = "The square is ${width * height}";//表达式的值引用
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

和Kotlin一样,dart中也有很多字符串操作的方法,比如字符串拆分、子串等

main() {
  String url = "https://mrale.ph/dartvm/";

  print(url.split("://")[0]); //字符串分割split方法,类似Java和Kotlin

  print(url.substring(3, 9)); //字符串截取substring方法, 类似Java和Kotlin

  print(url.codeUnitAt(0)); //取当前索引位置字符的UTF-16码

  print(url.startsWith("https")); //当前字符串是否以指定字符开头, 类似Java和Kotlin

  print(url.endsWith("/")); //当前字符串是否以指定字符结尾, 类似Java和Kotlin

  print(url.toUpperCase()); //大写, 类似Java和Kotlin

  print(url.toLowerCase()); //小写, 类似Java和Kotlin

  print(url.indexOf("ph")); //获取指定字符的索引位置, 类似Java和Kotlin

  print(url.contains("http")); //字符串是否包含指定字符, 类似Java和Kotlin

  print(url.trim()); //去除字符串的首尾空格, 类似Java和Kotlin

  print(url.length); //获取字符串长度

  print(url.replaceFirst("t", "A")); //替换第一次出现t字符位置的字符

  print(url.replaceAll("m", "M")); //全部替换, 类似Java和Kotlin
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
4、类型检查(is和is!)和强制类型转换(as)

和Kotlin一样,dart也是通过 is 关键字来对类型进行检查以及使用 as 关键字对类型进行强制转换,如果判断不是某个类型dart中使用 is! , 而在Kotlin中正好相反则用 !is 表示。

main() {
    int number = 100;
    double distance = 200.5;
    num age = 18;
    print(number is num);//true
    print(distance is! int);//true
    print(age as int);//18
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
5、Runes和Symbols类型

在Dart中的Runes和Symbols类型使用并不多,这里做个简单的介绍, Runes类型是UTF-32字节单元定义的Unicode字符串,Unicode可以使用数字表示字母、数字和符号,然而在dart中String是一系列的UTF-16的字节单元,所以想要表示32位的Unicode的值,就需要用到Runes类型。我们一般使用\uxxxx这种形式来表示一个Unicode码,xxxx 表示4个十六进制值。当十六进制数据多余或者少于4位时,将十六进制数放入到花括号中,例如,微笑表情(?)是\u{1f600}。而Symbols类型则用得很少,一般用于Dart中的反射,但是注意在Flutter中禁止使用反射。

main() {
  var clapping = '\u{1f44f}';
  print(clapping);
  print(clapping.codeUnits);//返回十六位的字符单元数组
  print(clapping.runes.toList());

  Runes input = new Runes(
      '\u2665  \u{1f605}  \u{1f60e}  \u{1f47b}  \u{1f596}  \u{1f44d}');
  print(new String.fromCharCodes(input));
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
6、Object类型

在Dart中所有东西都是对象,都继承于Object, 所以可以使用Object可以定义任何的变量,而且赋值后,类型也可以更改。

main() {
    Object color = 'black';
    color = 0xff000000;//运行正常,0xff000000类型是int, int也继承于Object   
}
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/897144
推荐阅读
相关标签
  

闽ICP备14008679号