Elixir 簡(jiǎn)明筆記(四)--- 基本數(shù)據(jù)類型

學(xué)習(xí)一門語言,如何才能算是學(xué)會(huì)呢?如同寫一篇文章,最簡(jiǎn)單的就是得先學(xué)會(huì)如何遣詞造句。文章的詞組,就像編程語言的基本數(shù)據(jù)結(jié)構(gòu)。

編程的本質(zhì)是數(shù)據(jù)結(jié)構(gòu)加算法。想要使用Elixir編程,當(dāng)然少不了它的數(shù)據(jù)結(jié)構(gòu)。所幸Elixir提供了豐富的數(shù)據(jù)結(jié)構(gòu)。其基本的數(shù)據(jù)結(jié)構(gòu)大致可分為值類型,系統(tǒng)類型和容器類型:

  • 值類型

    • 數(shù)字(Number)
      • 整型(Integer)
      • 浮點(diǎn)類型(Float)
    • 原子(Atom)
    • 范圍(Range)
    • 正則表達(dá)式(Regular expressions)
  • 系統(tǒng)類型:

    • 進(jìn)程(PID)和 端口(port)
    • 引用(References)
  • 容器類型

    • 元組(Tuple)
    • 列表(List)
    • 圖(Map)
    • 二進(jìn)制 (Binary)

數(shù)字類型

數(shù)字類型包括整型和浮點(diǎn)型,與其他編程語言類似,它們也沒有特別之處。Elixir中可以直接書寫它們。當(dāng)然,我們很熟悉書寫十進(jìn)制的數(shù)字。對(duì)于八進(jìn)制,十六進(jìn)制,Elixir也支持字面量書寫的方式。

iex(1)> n = 10
10
iex(2)> n = 0x10
16
iex(3)> n = 0o10
8

使用0x前綴寫十六進(jìn)制的數(shù)字,使用0o前綴定義八進(jìn)制的數(shù)字。對(duì)于十進(jìn)制,還可以使用_符號(hào)來對(duì)數(shù)字分組閱讀,例如:

iex(1)> n = 1000000
1000000
iex(2)> a = 1_000_000
1000000
iex(3)> n = a
1000000
iex(4)> n == a
true

可見 na 的值相等,不然a=n的模式匹配則會(huì)失敗,正好復(fù)習(xí)一下模式匹配,==則是邏輯運(yùn)算符,后面再做介紹了。

需要注意的是Elixir的整型的大小是沒有限制的。數(shù)字類型中的另外一種則是浮點(diǎn)類型,Elixir的浮點(diǎn)類型符合IEEE 754 雙進(jìn)度標(biāo)準(zhǔn)??梢员WC16位精確。

原子類型

原子(Atoms)的定義使用一個(gè)冒號(hào)加上任意Elixir字符(非數(shù)字開頭, 非.)。

原子和Lisp或者Ruby的符號(hào)類型類似。其值就是原子名本身。下面看幾個(gè)例子:

iex(1)> :hello
:hello
iex(2)> :rsj217
:rsj217
iex(3)> :do_you_love_me?
:do_you_love_me?
iex(4)> :yes!
:yes!
iex(5)> :"Thank God"
:"Thank God"
iex(6)> :123
** (SyntaxError) iex:6: invalid token: :123
iex(6)> :123A
** (SyntaxError) iex:6: invalid token: :123A

兩個(gè)同名的原子其值總是相等。即使他們是被不同的程序、不同的計(jì)算機(jī)哪跨洋創(chuàng)建的。原子很有用,通常用于當(dāng)tag的值。

原子類型很常見,最常見的一類莫過于布爾類型。Elixir中的布爾值只有兩個(gè),分別是true表示邏輯真,用false用來表示邏輯非。布爾類型的值就是其本身,即true的值是true,false的值是false,對(duì)吧,這就是原子。

iex(1)> true
true
iex(2)> :true
true
iex(3)> a = true
true
iex(4)> b = :true
true
iex(5)> a = b
true
iex(6)> a == b
true
iex(7)>

范圍

范圍(range)是一類數(shù)字或者字母的值,表示一個(gè)范圍,使用起始值..終止值定義。例如:

iex(1)> r = 0..9
0..9

范圍可以用于迭代。

正則表達(dá)式

也許把范圍和正則表達(dá)歸結(jié)為值類型欠妥。實(shí)際上他們確實(shí)不是值類型,只是一種結(jié)構(gòu)。只不過,把他們看成值類型,現(xiàn)在比較好理解。

正則表達(dá)式通常用于處理文本。Elixir中當(dāng)然也有字符串(String)類型,可是為何沒有出現(xiàn)在上面的介紹中呢?實(shí)際上,字符串不是基本類型,他們是由基本類型復(fù)合構(gòu)成的,伴隨更深了的了解Elixir,再對(duì)正則和字符串進(jìn)行介紹。

系統(tǒng)類型

Elixir是運(yùn)行在Erlang虛擬機(jī)上的語言。其中并發(fā)能力主要來自Elixir可以開啟成千上萬給進(jìn)程。這些進(jìn)程之間通過消息通信。進(jìn)程(PID)和端口(Port)這兩個(gè)系統(tǒng)類型則是用于處理Elixir進(jìn)程所用的基本數(shù)據(jù)類型。關(guān)于他們的介紹,等學(xué)到了Elixir進(jìn)程相關(guān)的知識(shí)再做介紹。

引用(References)也是一種系統(tǒng)類型,目前還沒搞明白。

容器類型

容器類型是Elixir中最常用的類型。常見的元組(Tuple)和列表(List)和圖(Map)以及二進(jìn)制 (Binary)。這些內(nèi)容將會(huì)下一節(jié)介紹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,394評(píng)論 6 13
  • 莫道春來晚 已過山海關(guān) 暖風(fēng)輕拂面 綠柳舞翩躚 櫻花枝頭鬧 競(jìng)艷白玉蘭 踏青知時(shí)節(jié) 人間四月天。
    湯河水閱讀 353評(píng)論 0 5
  • ( 八 ) “小雪,你醒啦!”林銘將上官飛雪緩緩扶起。上官飛雪看著林銘,突然又埋頭哭了起來。林銘輕輕撫著上官飛雪的...
    冷言天妒閱讀 290評(píng)論 0 0
  • 翡翠相傳在古代是南方的一種鳥,有著藍(lán)、綠、紅、棕等漂亮的毛色,雄性的為紅色,人們 謂之"翡",雌性的為綠色,謂之"...
    珠寶大課堂閱讀 1,292評(píng)論 0 0

友情鏈接更多精彩內(nèi)容