美文网首页
Dart学习笔记2

Dart学习笔记2

作者: Love零O | 来源:发表于2019-01-02 17:50 被阅读0次

    Built-in types(内置的类型)

    Dart 内置支持下面这些类型:

    • numbers
    • strings
    • booleans
    • lists (也被称之为 arrays)
    • maps
    • runes (用于在字符串中表示 Unicode 字符)
    • symbols

    Numbers(数值)

    Dart 支持两种类型的数字:
    int
    整数值,其取值通常位于-2^{53}2^{53}之间。
    double
    64-bit (双精度) 浮点数,符合 IEEE 754 标准。
    intdouble 都是 num 的子类。 num 类型定义了基本的操作符,例如 +, -, /, 和 *, 还定义了 abs()ceil()、和 floor() 等 函数。 (位操作符,例如 >> 定义在 int 类中。)

    整数是不带小数点的数字。

      var x = 1;
      var hex = 0xDEADBEEF;
      var bigInt = 34653465233243244;
    

    如果一个数带小数点,则其为 double。

    var y = 1.1;
    var exponents = 1.42e5;
    

    下面是字符串和数字之间转换的方式:

    void main() {
      // String -> int
      var one = int.parse('1');
      print("one => ${one == 1}");
    
      // String -> double
      var onePointOne = double.parse('1.1');
      print("onePointOne => ${onePointOne == 1.1}");
    
      // int -> String
      String oneAsString = 1.toString();
      print("oneAsString => ${oneAsString == '1'}");
    
      // double -> String
      String piAsString = 3.1415926.toStringAsFixed(2);
      print("piAsString => ${piAsString == '3.14'}");
    }
    
    num.png

    整数类型支持传统的位移操作符,(<<, >>), AND (&), 和 OR (|) 。例如:

    // 0011 << 1 == 0110
      print("(3 << 1) == 6 => ${(3 << 1) == 6}");
      // 0011 >> 1 == 0001
      print("(3 >> 1) == 1 => ${(3 >> 1) == 1}");
      // 0011 | 0100 == 0111
      print("(3 | 4)  == 7 => ${(3 | 4)  == 7}");
    

    数字字面量为编译时常量。 很多算术表达式只要其操作数是常量,则表达式结果也是编译时常量。

    const msPerSecond = 1000;
    const secondsUntilRetry = 5;
    const msUntilRetry = secondsUntilRetry * msPerSecond;
    

    Strings(字符串)

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

    var s1 = 'Single quotes work well for string literals.';
    var s2 = "Double quotes work just as well.";
    var s3 = 'It\'s easy to escape the string delimiter.';
    var s4 = "It's even easier to use the other delimiter.";
    

    可以在字符串中使用表达式,用法是这样的: ${expression}。如果表达式是一个比赛服,可以省略 {}。 如果表达式的结果为一个对象,则 Dart 会调用对象的 toString() 函数来获取一个字符串。

      var s = 'love';
      print('i $s u' == 'i love '+'u');
      
      print('i ${s.toUpperCase()} u' == 'i LOVE u');
    

    可以使用 + 操作符来把多个字符串链接为一个,也可以把多个字符串放到一起来实现同样的功能:

      var s = 'my youth ' 'my youth is yours,' "trippin'on skies sippin' waterfalls.";
      print(s);
    
    string.jpg

    使用三个单引号或者双引号也可以 创建多行字符串对象:

     var s1 = '''
      you can create 
      multi-line strings
      like this one.
      ''';
      print(s1);
    
      var s2 = """
      This is also a
      multi-line string.
      """;
      print(s2);
    
    multi_line.jpg

    字符串字面量是编译时常量, 带有字符串插值的字符串定义,若干插值表达式引用的为编译时常量则其结果也是编译时常量。

    // These work in a const string.
    const aConstNum = 0;
    const aConstBool = true;
    const aConstString = 'a constant string';
    
    // These do NOT work in a const string.
    var aNum = 0;
    var aBool = true;
    var aString = 'a string';
    const aConstList = const [1, 2, 3];
    
    const validConstString = '$aConstNum $aConstBool $aConstString';
    // const invalidConstString = '$aNum $aBool $aString $aConstList';
    

    Searching inside a string(在字符串内搜索)

    可以在字符串内查找特定字符的位置,还可以判断字符串是否以特定字符串开始和结尾。 例如:

    // Check whether a string contains another string.
    assert('Never odd or even'.contains('odd'));
    
    // Does a string start with another string?
    assert('Never odd or even'.startsWith('Never'));
    
    // Does a string end with another string?
    assert('Never odd or even'.endsWith('even'));
    
    // Find the location of a string inside a string.
    assert('Never odd or even'.indexOf('odd') == 6);
    

    Extracting data from a string(从字符串中提取数据)

    可以从字符串中获取到单个的字符,单个字符可以是 String 也可以是 int 值。 准确来说,实际得到的是一个 UTF-16 code units; 对于码率比较大的字符,实际得到的是两个 code units,例如 treble clef 符号 (‘\u{1D11E}’) 。
    还可以从字符串中提取一个子字符串,或者把字符串分割为 多个子字符串:

    // Grab a substring.
    assert('Never odd or even'.substring(6, 9) == 'odd');
    
    // Split a string using a string pattern.
    var parts = 'structured web apps'.split(' ');
    assert(parts.length == 3);
    assert(parts[0] == 'structured');
    
    // Get a UTF-16 code unit (as a string) by index.
    assert('Never odd or even'[0] == 'N');
    
    // Use split() with an empty string parameter to get
    // a list of all characters (as Strings); good for
    // iterating.
    for (var char in 'hello'.split('')) {
      print(char);
    }
    
    // Get all the UTF-16 code units in the string.
    var codeUnitList = 'Never odd or even'.codeUnits.toList();
    assert(codeUnitList[0] == 78);
    

    Converting to uppercase or lowercase(大小写转换)

    字符串大小写转换是非常 简单的:

    // Convert to uppercase.
    assert('structured web apps'.toUpperCase() ==
        'STRUCTURED WEB APPS');
    
    // Convert to lowercase.
    assert('STRUCTURED WEB APPS'.toLowerCase() ==
        'structured web apps');
    

    Trimming and empty strings(裁剪和判断空字符串)

    trim() 函数可以删除字符串前后的空白字符。使用 isEmpty 可以 判断字符串是否为空(长度为 0)。

    // Trim a string.
    assert('  hello  '.trim() == 'hello');
    
    // Check whether a string is empty.
    assert(''.isEmpty);
    
    // Strings with only white space are not empty.
    assert(!'  '.isEmpty);
    

    Replacing part of a string(替换部分字符)

    Strings 是不可变的对象,可以创建他们但是无法修改。 如果你仔细研究了 String API 文档,你会注意到并没有 函数可以修改字符串的状态。 例如,函数 replaceAll() 返回一个新的 String 对象而不是修改 旧的对象:

    var greetingTemplate = 'Hello, NAME!';
    var greeting = greetingTemplate
        .replaceAll(new RegExp('NAME'), 'Bob');
    
    assert(greeting !=greetingTemplate); // greetingTemplate didn't change.
    

    Building a string(创建字符串)

    使用 StringBuffer 可以在代码中创建字符串。 只有当你调用 StringBuffer 的 toString() 函数的时候,才会创建一个 新的 String 对象。而 writeAll() 函数还有一个可选的参数来指定每个字符串的分隔符, 例如下面指定空格为分隔符:

    var sb = new StringBuffer();
    sb..write('Use a StringBuffer for ')
      ..writeAll(['efficient', 'string', 'creation'], ' ')
      ..write('.');
    
    var fullString = sb.toString();
    
    assert(fullString ==
        'Use a StringBuffer for efficient string creation.');
    

    Regular expressions(正则表达式)

    RegExp 类提供了 JavaScript 正则表达式同样的功能。 正则表达式可以高效率的搜索和匹配 字符串。

    // Here's a regular expression for one or more digits.
    var numbers = new RegExp(r'\d+');
    
    var allCharacters = 'llamas live fifteen to twenty years';
    var someDigits = 'llamas live 15 to 20 years';
    
    // contains() can use a regular expression.
    assert(!allCharacters.contains(numbers));
    assert(someDigits.contains(numbers));
    
    // Replace every match with another string.
    var exedOut = someDigits.replaceAll(numbers, 'XX');
    assert(exedOut == 'llamas live XX to XX years');
    

    关于String的更多内容请前往: String API 文档

    相关文章

      网友评论

          本文标题:Dart学习笔记2

          本文链接:https://www.haomeiwen.com/subject/irbclqtx.html