flutter【2】dart語言--內(nèi)置數(shù)據(jù)類型

先說下題外話哈,最近做了個領(lǐng)取電商平臺優(yōu)惠券的小程序侍筛,掃碼支持下哈~


image

內(nèi)置類型

  • 數(shù)值型
  • 字符串
  • 布爾型
  • 列表/數(shù)組
  • Map
  • runes(表示字符串中的 unicode 字符)
  • symbols

上述類型的變量多可以用字面量進(jìn)行初始化凡恍,例如 'this is a string' 是一個字符串字面量柜某,true 是 boolean 字面量

dart中變量都是引用的對象,所以可以用構(gòu)造器進(jìn)行初始化抛杨,部分內(nèi)置變量有自己的構(gòu)造器暗赶,例如 Map()鄙币。

數(shù)值型

dart的數(shù)值型有兩種:

  • int:整型,位寬由運(yùn)行平臺決定蹂随,但是不大于 64 bit
  • double:IEEE754 標(biāo)準(zhǔn)定義的 64 bit 雙精度浮點(diǎn)數(shù)

int 和 double 都是 num 的子類型十嘿,包括加減乘除(+ - * /)操作,abs()糙及,ceil()详幽,floor(),等方法浸锨。(位移操作 >> 在 int 中定義)。如果基礎(chǔ)操作滿足不了需求版姑,可以使用 dart:math 庫柱搜。

在dart2.1之后,整型字面量可以自動轉(zhuǎn)換為 double 型: double z = 1; //等價于 double z = 1.0

字符串與整型互相轉(zhuǎn)換

// String -> int
var one = int.parse('1');
assert(one == 1);

// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);

// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');

// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');

整型的位運(yùn)算剥险、與運(yùn)算聪蘸、或運(yùn)算

assert((3 << 1) == 6); // 0011 << 1 == 0110
assert((3 >> 1) == 1); // 0011 >> 1 == 0001
assert((3 | 4) == 7); // 0011 | 0100 == 0111

數(shù)值型字面量是編譯時常量。由編譯時常量組成的算術(shù)表達(dá)式也是編譯時常量表制。

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

String

dart 使用的是 utf-16 的字符集健爬,可以用單引號或者雙引號創(chuàng)建。

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} 可以在字符串中使用表達(dá)式的值么介,如果表達(dá)式就是一個標(biāo)識符娜遵,可以省略大括號。

    var s = 'string interpolation';

    assert('Dart has $s, which is very handy.' ==
        'Dart has string interpolation, ' + 'which is very handy.');
    assert('That deserves all caps. ' + '${s.toUpperCase()} is very handy!' ==
        'That deserves all caps. ' + 'STRING INTERPOLATION is very handy!');

dart 中 == 用來判斷連個對象是否相等壤短,字符串只要字符內(nèi)容相同就表示相等设拟。

連接字符串可以用 + 操作符慨仿,也可以用相鄰的字符串字面量。

    var s1 = 'String '
        'concatenation'
        " works even over line breaks.";
    assert(s1 ==
        'String concatenation works even over '
        'line breaks.');

    var s2 = 'The + operator ' + 'works, as well.';
    assert(s2 == 'The + operator works, as well.');

創(chuàng)建多行字符串:使用三個單引號或者雙引號纳胧。

    var s1 = '''
You can create
multi-line strings like this one.
''';

    var s2 = """This is also a
multi-line string.""";

raw字符串:其中的轉(zhuǎn)義符不會被處理

var s = r'In a raw string, not even \n gets special treatment.';

更多信息參考Strings and regular expressions

布爾型

dart中用 bool 類型來表述布爾數(shù)據(jù)镰吆,只有兩個對象有 bool 類型:true 和 false(boolean字面量,編譯時常量)

dart的類型安全意思是不可用如下代碼

if(nonbooleanValue) ……

assert(nonbooleanValue)

列表

dart中 List 對象表示數(shù)組跑慕,也就是列表万皿。

字面量列表:var list = [1, 2, 3]; , 會自動推斷為 List<int> 列表核行,如果后面插入非 int 型對象牢硅,將會出錯,具體信息請參考type inference钮科。

列表索引從 0 開始唤衫,到 lsit.length - 1 結(jié)束。

創(chuàng)建編譯時常量列表需要在字面量列表前加上 const 關(guān)鍵字绵脯。 var constList = const [1, 2, 3];

更多信息請參考GenericsCollections

Maps

key-value結(jié)構(gòu)佳励,dart 中用 Map類型表示。

    var gifts = {
      // Key:    Value
      'first': 'partridge',
      'second': 'turtledoves',
      'fifth': 'golden rings'
    };

    var nobleGases = {
      2: 'helium',
      10: 'neon',
      18: 'argon',
    };

gifts 推斷為 Map<String, String>蛆挫;nobleGases 推斷為 Map<int, String>赃承。

可以使用 Map 的構(gòu)造器創(chuàng)建Map對象,其中 new 關(guān)鍵字可以加也可以省略悴侵。

    var gifts = Map();
    gifts['first'] = 'partridge';
    gifts['second'] = 'turtledoves';
    gifts['fifth'] = 'golden rings';

    var nobleGases = Map();
    nobleGases[2] = 'helium';
    nobleGases[10] = 'neon';
    nobleGases[18] = 'argon';

更多信息請參考GenericsMaps

Runes

runes是dart中表示utf-32格式字符的編碼單元瞧剖。(In Dart, runes are the UTF-32 code points of a string.)

unicode 為全世界在用的所有字母、數(shù)字可免、符號都定義了一個獨(dú)一無二的數(shù)值抓于,但是dart的字符序列使用的是 utf-16的編碼格式,所以表示utf-32unicode格式的值需要特殊的語法浇借。

通常情況下一個unicode編碼格式為 \uXXXX捉撮,XXXX是4位16進(jìn)制的數(shù)值,如 \u2665妇垢,當(dāng)要表示多于或者少于4位的時巾遭,用大括號包起來,如 \u{1f600}闯估。

String 類提供了獲取 rune 信息的屬性灼舍,比如 codeUnitAt 和 codeUnit 獲取 字節(jié)的16-bit 編碼;使用runes屬性獲取字符串的runes涨薪。

可以用如下代碼展示runes骑素、16位編碼單元和32位編碼單元的關(guān)系。

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));
}

需要注意的是操作 runes 列表時很容易因?yàn)樘厥獾恼Z言尤辱、字符和操作而崩潰砂豌,具體參考How do I reverse a String in Dart?

Symbols

參考官網(wǎng)描述吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厢岂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子阳距,更是在濱河造成了極大的恐慌塔粒,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筐摘,死亡現(xiàn)場離奇詭異卒茬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)咖熟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門圃酵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人馍管,你說我怎么就攤上這事郭赐。” “怎么了确沸?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵捌锭,是天一觀的道長。 經(jīng)常有香客問我罗捎,道長观谦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任桨菜,我火速辦了婚禮豁状,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘倒得。我一直安慰自己泻红,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布霞掺。 她就那樣靜靜地躺著承桥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪根悼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天蜀撑,我揣著相機(jī)與錄音挤巡,去河邊找鬼。 笑死酷麦,一個胖子當(dāng)著我的面吹牛矿卑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沃饶,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼母廷,長吁一口氣:“原來是場噩夢啊……” “哼轻黑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起琴昆,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤氓鄙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后业舍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抖拦,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年舷暮,在試婚紗的時候發(fā)現(xiàn)自己被綠了态罪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡下面,死狀恐怖复颈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沥割,我是刑警寧澤耗啦,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站驯遇,受9級特大地震影響芹彬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叉庐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一舒帮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧陡叠,春花似錦玩郊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至兴溜,卻和暖如春侦厚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拙徽。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工刨沦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人膘怕。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓想诅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子来破,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容