You are on page 1of 19

本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.

tw
或來電(02)2705-5066
目錄

推薦序 I
作者序一 III
作者序二 VII

PART 1 Chapter 1 Julia 是什麼樣的程式語言? 001


從幾個 Chapter 2 走入 Julia 的世界
重要的問題
011

開始
Chapter 3 上手 Julia 045

Chapter 4 控制流程―條件判斷與迴圈 075


Chapter 5 集合容器 095
PART 2
程式設計
Chapter 6 字元、字串與正規表達式 139

基礎篇
Chapter 7 函式 165
Chapter 8 遞迴 193
Chapter 9 例外處理 203

本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
CONTENTS

PART 3 Chapter 10 型別 211

程式設計 Chapter 11 方法 235


物件篇 Chapter 12 資料結構與泛型程式設計 249

Chapter 13 檔案讀寫 275


PART 4
串流與檔案
Chapter 14 網路程式設計 289
Chapter 15 檔案與目錄管理 297

PART 5 Chapter 16 再論型別系統 307

程式設計 Chapter 17 函數式程式設計 323


進階篇 Chapter 18 Macro 及 Metaprogramming 333

附錄:參考資料與學習資源、運算子優先權表、ASCII 字碼介紹與字碼表、
跳脫字元表 349

本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
02
走入 Julia 的世界

1. 認識 Julia 4. 電腦是一台計算機
安裝 Julia 加法運算
Julia 命令列 減法運算
套件管理器 乘法運算
2. 認識 Jupyter 除法運算
安裝 Jupyter 及 IJulia 5. 型別與值
Jupyter notebook 環境介紹 6. 讓我們把數字存下來
3. 我的第一支 Julia 程式 變數
註解 變數命名
跳脫字元 使用變數的範例

本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
012 Julia 程式設計

1. 認識 Julia

安裝 Julia
接著就要帶大家走進 Julia 的世界,我們將會一步一步帶著大家安裝
Julia 語言。我們可以透過瀏覽器連上 julialang 的官網 https://julialang.
org/,圖 2-1 是官網的畫面:

圖 2-1 julia 官網

我們可以看到圖 2-1 上方有兩個大大的按鈕,點擊 Download 進入下


載頁面。圖 2-2 可以看到 Julia 的下載頁面,請選擇相對應的作業系統平
台,在這邊提供 Windows、MacOS 及 Linux,分別有 32 及 64 位元版本。
點擊相對應版本之後將會自動下載。

本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
02 走入 Julia 的世界 013

圖 2-2 讀者可依自己的作業系統選擇下載的版本

目前我們示範的是 Julia 1.1.0 版,如圖 2-3。

圖 2-3 下載 1.1.0 版

下載完成後請點擊安裝程式,進行安裝。圖 2-4 這邊可以讓你選擇安


裝的路徑,接著按下「Install」就會自動進行安裝(如圖 2-5),請耐心
等待它安裝完成。

本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
014 Julia 程式設計

圖 2-4 選擇安裝路徑

本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
圖 2-5 安裝中
或來電(02)2705-5066
03
上手 Julia

1. 變數 3. 複數與有理數
變數的概念 複數
記憶體概念 有理數
支援類 LaTeX 作為變數名稱 4. 電腦的數字儲存方式
支援 Unicode 作為變數名稱 整數的上下限
2. 數字 位元運算子
整數 位元溢位
算術運算子 布林值介紹
浮點數 布林值的運算
比較運算子
運算元與運算子
常數
數字字面係數

本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
046 Julia 程式設計

1. 變數

變數的概念
在電腦中的變數(variable)與數學上的變數有相似卻又不同的概念。
數學上,我們會設定一個變數來代表一個概念,或是一個數字。通常我們
在數學上會將變數拿來做運算,或是作為架構方程式的基礎元素。在代表
概念這點上,電腦中的變數的確有著這樣的概念。電腦中的變數的確可以
拿來代表一個概念或是一個物件,不同的是,電腦中的變數卻無法用來架
構方程式,進而解出方程式的解答。在抽象的程度上還是有所不同。
另一方面,電腦中的變數其實會存在於記憶體中。精確地描述,電腦
的記憶體會區分出一塊空間,這塊空間當中的位元資料代表著某個數字,
而這個數字則是變數現存的值。變數會因為運算而改變,在經過各種演算
法的步驟後,變數當中儲存的數值會不斷地變化,直到運算結束。變數的
另一個特性就是可以將數值暫存下來,以便之後的運算使用。在記憶體中
儲存的這些數值會在程式結束執行之後被清空。

記憶體概念
我們在程式當中所使用的變數都會儲存在記憶體中。每個變數都會俱
備名稱(name)、型別(type)、位元大小(size)以及值(value)。當執
行以下敘述時:

In [1]:
x=5
Out[1]:
5

x 會做為這個變數的名稱,相對應的值則是 5。在 Julia 中,使用者即


本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
03 上手 Julia 047

便不指定型別,編譯器便會自動去辨識這個值相對應的型別是什麼,所以
在產生這個變數的當下,編譯器已經知道了它是個 Int64 的型別,並且為
它安排了 64 位元的記憶體空間作為存放空間。想當然耳,生成愈多的變
數便會占去愈多的記憶體空間。

In [2]:
y=7
Out[2]:
7

In [3]:
z=x+y
Out[3]:
12

支援類 LaTeX 作為變數名稱


這也是 Julia 極為有特色的功能之一,使用者可以在 Julia 命令列或是
jupyter notebook 中照著以下的方法打出類似 LaTex:
本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
048 Julia 程式設計

在 cell 中輸入 \delta。

In [ ]:
\delta

按下 Tab 鍵,會發現 delta 的符號出現。

In [ ]:
δ

小練習

如何產生 α2α2 呢?
首先,在 cell 中輸入 \alpha。

In [ ]:
\alpha

按下 Tab 鍵,會出現 α。

In [ ]:
α

在 α 的後方接著 \_2。

In [ ]:
α\_2

按下 Tab 鍵,則會出現 α2。

In [ ]:
α
本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
03 上手 Julia 049

我們可以使用 α2 作為合法的變數名稱。

In [4]:
α2 = 0.23
Out[4]:
0.23

小叮嚀

如果要做上標 2,可以使用 \^2。下標的前置符號是 _,上標


則是 ^。

支援 Unicode 作為變數名稱
這是 Julia 極為有特色的功能之一,一般的程式語言只有支援 ASCII
字碼表可以作為變數名稱,但是 Julia 支援了更廣泛的 Unicode 作為變數
名稱。以下的變數名稱是合法的:

In [5]:
δ = 0.00001
Out[5]:
1.0e-5

In [6]:
안녕하세요 = "Hello"
Out[6]:
"Hello"

In [7]:
哈囉 = "Hello"
Out[7]:
本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
"Hello"

或來電(02)2705-5066
050 Julia 程式設計

In [8]:
おはよう = "Good morning"
Out[8]:
"Good morning"

小叮嚀
命名指南:
●建議變數命名都用小寫。
●字跟字之間請用底線隔開,像 lower_case ,不過不鼓勵使用底線,
除非影響到可讀性。

2. 數字

我們接下來會正式地詳細介紹在 Julia 中有支援的數字(numbers)


型別。
數字可以分成:
● 整數(Integer)
● 浮點數(Floating-point number)
● 常數表示法
Julia 還有支援:
● 有理數(Rational number)
● 複數(Complex number)

整數
整數(integer)有分成不同位元大小的版本。不同位元大小的意思
是會以不同的位元來儲存一個整數,比較多位元可以表示的整數範圍較
大,相對較少的位元占的記憶體空間較少,可以表示的整數範圍也較小。
本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
03 上手 Julia 051

我們可以看到表 3-1,表中顯示了不同整數的位元版本,最小的 8 位
元到最大的 64 位元,可以看到它們的表示範圍大小並不同, 像是 Int8 的
表示的範圍會從負值 − 27 到正值 27 − 1。它是整數當中用的位元最少的
整數,然而可以表達的範圍也最小。

表 3-1 不同整數的位元版本(摘錄自 Julia 官方網站)


型別 是否帶有正負號? 位元大小 最小值 最大值
Int8 T 8 −2 7
27 − 1
Uint8 F 8 0 28 − 1
Int16 T 16 − 215 215 − 1
Uint16 F 16 0 216 − 1
Int32 T 32 − 231 231 − 1
Uint32 F 32 0 232 − 1
Int64 T 64 − 263 263 − 1
Uint64 F 64 0 264 − 1
Int128 T 128 −2 127
2127 − 1
Uint128 F 128 0 2128 − 1
Bool 8 false true

一般來說,整數都會包含正負號的表示範圍,我們稱為有符號整數
(signed integer),然而也有是表現 0 及正值範圍的整數型別,我們稱
為無符號整數(unsigned integer),這些整數型別可以表達的正值範圍
會是有符號整數的兩倍。
整數型別的使用上,一般會遵循系統預設值,如果有需要最佳化記憶
體的使用或是運算的效能,就會去調整整數的位元大小以及有無符號。

如果沒有特別宣告的話,會依據系統位元數決定

如果沒有特別宣告,整數的位元大小會由系統預設值決定,一般來
說,64 位元的電腦會使用 Int64,32 位元的電腦會使用 Int32。
我們可以用以下程式碼來測試看看你的電腦預設使用的整數位元大小
本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
052 Julia 程式設計

是多少:

In [9]:
Int
Out[9]:
Int64

Int 代 表 的 是 整 數 本 身, 並 沒 有 預 設 位 元 大 小, 而 系 統 回 應 的 是
Int64,則代表筆者的電腦是使用 64 位元的電腦。

我能不能使用其他型別的數字?

要使用其他位元版本的整數型別,只需要改成 型別(數字) 的樣子


即可,像是:

In [10]:
Int8(10)
Out[10]:
10

以上是使用 Int8 型別來宣告數字 10,所以這是一個 Int8 型別的數字


10。

有符號及無符號整數

在電腦中,符號的有無是指有沒有一個位元來代表正負號。通常系
統預設的整數是有符號的整數。無符號的整數會表示 0 以及一系列的正整
數。相較有符號整數,無符號所能表示的正整數的數目約是有符號整數的
兩倍。如果想轉換有無符號整數的話,可以參考以下函式:

In [11]:
unsigned(8)
Out[11]:
0x0000000000000008

unsigned 可以將整數轉成無符號整數。
本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
03 上手 Julia 053

In [12]:
signed(UInt8(5))
Out[12]:
5

signed 則是可以將整數轉成有符號整數。

算術運算子
這邊介紹數字都通用的算術運算子(arithmetic operators)以及比
較運算子。算術運算子除了大家平時非常熟悉的四則運算,還有取餘數以
及次方的運算。

當 x 跟 y 都是數字……

● -x: 變號
● x + y、 x – y、 x * y、 x / y: 一般四則運算
● div(x, y): 商
● x % y: 餘數,也可以用 rem(x, y)
● x \ y: 跟 / 的作用一樣
● x ^ y: 次方
我們這邊只介紹大家比較不熟悉的取商數、餘數以及次方運算。以下
分別是 123 除以 50 的商及餘數:

In [13]:
div(123, 50)
Out[13]:
2

In [14]:
123 % 50
Out[14]:
23
本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
054 Julia 程式設計

2 的 10 次方則是寫成:
In [15]:
2^10
Out[15]:
1024

小叮嚀
讓程式更好閱讀:運算子前後的空白多寡是不影響語法的 ,
假設我們以底線 _ 來表示空白字元,所以 1+1、1+_1、1_+1 或
是 1_+_1 四種不同的寫法都是可以順利執行的。但是為了閱讀上
的便利性,筆者傾向寫成 1_+_1,會有比較好的閱讀效果。

運算子優先權規則

在一個表達式中,常常會有多個運算子一起組合成一個表達式的時
候,以不同的順序計算整個表達式可能會有不同的答案。就如同我們在數
學中學到的,先乘除後加減,在程式當中也是一樣的,也就是乘法與除法
的優先權會高於加法與減法。我們在程式當中運算子的優先權如下表 3-2:

表 3-2 運算子的優先權
優先權 運算子
高 ^
中 *, /, %, \
低 +, -

這一段表達式中優先權高的會先被運算,依序算到優先權最低的,像
是 5^2 * 6 + 2,5^2 的部分會先被運算,變成 25 * 6 + 2,接著運算 25 * 6
的部分,最後會是加法的運算。
本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
03 上手 Julia 055

以小括弧來組織運算式

由於有運算子優先權的規則,我們無法任意更改運算子的運算優先順
序,但是我們可以藉由加入小括弧促使電腦優先計算小括弧內的值,來重
新組織運算優先權。像是:

((1 + 2) * 3)

這時候,(1 + 2) 會先被運算,接著才是 (3 * 3) 的部分。這邊與我們的


數學運算規則是一致的,差別在於程式都是用小括弧來組織運算的。

浮點數
浮點數(floating-point number)基本上就是在有小數點的數,但
是同樣位元數的浮點數,比起同樣位元數的整數表示範圍來得大, 然而浮
點數可以以科學符號表示。以下是各種浮點數的表示方式:

In [16]:
0.5
Out[16]:
0.5

In [17]:
.5
Out[17]:
0.5

In [18]:
5e10
Ot[18]:
5.0e10

5e10 代表的是 5 乘以 10 的 10 次方(5×1010)。如果次方項是負的,


就可以直接寫成:
本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
或來電(02)2705-5066
Julia程式設計:新世代資料科學與數值運算語
言/杜岳華, 胡筱薇著. -- 二版. -- 台北市 :
五南,2019.06
  面; 公分.

ISBN 978-957-763-382-8(平裝)

1.Julia(電腦程式語言)

312.32J8 108005089

1HAF

Julia程式設計:
新世代資料科學與數值運算語言
作  者 ─ 杜岳華、胡筱薇

發 行 人 ─ 楊榮川

總 經 理 ─ 楊士清

總 編 輯 ─ 楊秀麗

副總編輯 ─ 張毓芬

責任編輯 ─ 紀易慧

文字校對 ─ 許宸瑞、黃志誠

封面設計 ─ 姚孝慈

出 版 者 ─ 五南圖書出版股份有限公司

地 址:台北市和平東路二段339號4樓

電 話:(02)27055066 傳真(02)27066100

郵撥帳號:01068953

網 址: http://www.wunan.com.tw/

電子郵件: wunan@wunan.com.tw

戶 名:五南圖書出版股份有限公司

法律顧問 林勝安律師事務所 林勝安律師

出版日期 2018年12月初版一刷

     2019年 3 月初版二刷

     2019年 6 月二版一刷
本試閱檔為五南所有。如欲購買此書,請至五南網站www.wunan.com.tw
定  價 新台幣500元
或來電(02)2705-5066
※版權所有.欲利用本書內容,必須徵求本公司同意※

You might also like