跳转到内容

BOO入門/變數

维基教科书,自由的教学读本
(重定向自BOO/變數

BOO入門 > 變數 (上一章:開始 下一章:流程控制/條件)


把 Booish 當成計算機

[编辑]

有五個基本的數字運算子:加 +、減 -、乘 *、除 /、取餘數 %,就先用這幾個運算子來試試吧。

$ booish
>>> 2 + 4 // 兩個 '/' 之後表示註解
6
>>> 2 * 4 # 在 '#' 之後也是註解
8
>>> 4 / 2 /* 這也是一個註解 */
2
>>> (500/10)*2
100
>>> 7 / 3 // 數值相除
2
>>> 7 % 3 // 取餘數
1
>>> -7 / 3
-2

你應該注意到上面包含了三種註解的方式: //、# 和 /* */。他們對程式沒有影響,不過在你寫程式時卻是很有用的幫手。

建議 建議 當使用單行註解時,盡量使用 // 而不要使用 #。

或許你還注意到 7/3 並不是得到 2.333....,這是因為你拿兩個整數相除。

定義 定義 整數:任何不包含小數位的正負數字,包括 0 都是所謂的整數。

電腦處理整數相除時,會作四捨五入去掉小數。 因此有小數位的話,你必須使用浮點數。

定義 定義 浮點數:在數學裡通常指的就是"有理"數,也就是有小數的數字。
$ booish
>>> 7.0 / 3.0 // Floating point division
2.33333333333333
>>> -8.0 / 5.0
-1.6

如果你的數字有小數點,即使它是 .0,它仍然是浮點數。

數字的型別

[编辑]

浮點數的種類有三種:單精度(single)、双精度(double)與 decimal。

單精度與双精的不同在於可表達數字的大小。在大部分的情況下,會比較偏好使用双精。

這兩者是以二進制為基底,在十進制數字系統運作時會導致一些問題發生。通常是沒什麼關係,但是在某些特定情況,像銀行,是不允許在數十兆的金錢合約中遺失一、兩分錢的。

這是 Decimal 被建立的原因。它是十進制的數字,這意味著不會遺失掉寶貴的一分錢。在正常的情形,倍經度非常完美。但在要求高精準的情況下,應該要使用 decimal。

之前我們提到的整數,其實也有多種的型別。"unsigned" 表示不允許存放負數﹔大小也有所不同:byte、short、int 和 long。 大部分的情況下,預設是使用 int。

字元與字串

[编辑]
定義 定義 字元:用來表示語言的可書寫符號。

所有在字母表的字母是字元,所有數字是字元,所有漢語字是字元,所有數學符號也是字元。在 Boo/.NET 裡面,字元都是以 Unicode 來編碼。

定義 定義 字串:線性連續的多個字元。

"apple" 就是宣告一個字串。

$ booish
>>> s = "apple"
'apple'
>>> print s
apple
>>> s += " banana"
'apple banana'
>>> print s
apple banana
>>> c = char('C')
C
>>> print c
C

看完例子,你可能不太想用字元,而改使用字串了。宣告字串的方式有三種:

  1. 使用雙引號,像是 "apple"
  2. 使用單引號,像是 'apple'
  3. 使用三個雙引號 """apple"""

前兩者的範圍都只有在單行,但三個雙引號可以跨越多行﹔此外,前兩者可以包含 '\'(反斜線逸出字元),第三者則將所有字元如實表示出來。

$ booish
>>> print "apple\nbanana"
apple
banana
>>> print 'good\ttimes'
good      times
>>> print """Leeroy\Jenkins"""
Leeroy\Jenkins

一般常見逸出字元有:

  • \\ 倒斜線(譯注:原文為 literal backslash,我懷疑這邊有問題)
  • \n 換行
  • \r 回行首
  • \t tab

如果你宣告了雙引號的字串,而你在字串裡又想使用雙引號的話,你可以使用 '\'(反斜線),同樣地,單引號字串也可以這樣使用。

$ booish
>>> print "The man said \"Hello\""
The man said "Hello"
>>> print 'I\'m happy'
I'm happy

字串是不變的,這意味著字串裡面的字元永遠不會被改變,你必須重新建立字串以改變其中的一個字元。(譯注:這是指內部處理而言,實際上當你重複指定,如: s="10" s="20",內部實際上是建立了 "10" 這個物件,然後將 s 指向 "10",接著再建立 "20" 這個物件,再把 s 指向 "20"。就是因為這樣,作者才會說字串裡面的字元永遠不會被改變。)

定義 定義 不變性:在字串建立以後並不是無法改變,只是試著改變一個不可變的物件時,會有錯誤發生。不變的相反是可變的。

字串的插值

[编辑]

字串插值讓你可以插入任何合法的 boo 運算式的值到字串裡面,使用方法是在運算式前後加上 ${}。

$ booish
>>> name = "Santa Claus"
Santa Claus
>>> print "Hello, ${name}!"
Hello, Santa Claus!
>>> print "2 + 2 = ${2 + 2}"
2 + 2 = 4

建議使用字串插值來取代字串相加的方式,原因是這比較簡單而且直覺。

字串插值會作用在使用雙引號的字串(含三引號的字串),但不作用在單引號的字串。

str = "Hello world!"
str_single_quote = '${str}'
str_double_quote = "${str}"
str_triple_quote = """${str}"""

print str_single_quote
print str_double_quote
print str_triple_quote

# 結果:
# ${str}
# Hello world!
# Hello world!

不想讓字串插值作用的話,在 $ 前面加上溢出字元 '\' 即,例如:\${}

布林

[编辑]
定義 定義 布林:表示 true (真) 或 false(假)的型別。

布林(Boolean)數值只能是 true(真) 或 false(假),在下個章節提到的條件式裡會經常被用到。

$ booish
>>> b = true
true
>>> print b
True
>>> b = false
false
>>> print b
False

对象型別

[编辑]
定義 定義 对象(物件):在物件導向程式設計程式典範中的中心觀念。

在 Boo/.NET 裡面,任何東西都是对象。即使像數字、字元這些值型別,也都是对象。

$ booish
>>> o as object
>>> o = 'string'
'string'
>>> print o
string
>>> o = 42
42
>>> print o
42

对象的問題是,你無法期望他是一個字串或是一個整數。看看下面的例子,如果不宣告 o as object 的話,這樣的順序是會出錯的:(譯注:Boo 會自動預測你所使用的型別,由於第一次被指定為字串,所以之後 o 就都被認定為字串了,接著再指派給它一個整數,Boo 會認定為錯誤,如果你修改為 o as object = "string" ,那麼就不會出錯,但是就無法得知 o 是一個字串或是一個整數了。)

$ booish
>>> o = 'string'
'string'
>>> print o
string
>>> o = 42
--------^
ERROR: Cannot convert 'System.Int32' to 'System.String'.

靜態型別可以讓程式碼更為安全與可靠。

宣告型別

[编辑]

這一章的最後,你會學到如何宣告變數的型別,也就是 o as object,<變數> as <型別> 的語法在任何型別上都適用,<型別>可以是 int、string、DateTime、bool 或是任何你自己定義的類別。

大部分的情況,Boo 都能聰明地知道你要的是什麼型別,i=25 就等同於 i as int = 25。

建議 建議 除非你之前已經宣告了同名的變數並且想變更型態,否則不要明確的指明變數要使用什麼型別。也就是盡量使用 i=25 來替代 i as int=25

值型別列表

[编辑]
Boo 型別 .NET Framework 型別 可表示正負? 長度(bytes) 數值範圍
sbyte System.Sbyte 1 -128 ~ 127
short System.Int16 2 -32768 ~ 32767
int System.Int32 4 -2147483648 ~ 2147483647
long System.Int64 8 -9223372036854775808 ~ 9223372036854775807
byte System.Byte 1 0 ~ 255
ushort System.Uint16 2 0 ~ 65535
uint System.UInt32 4 0 ~ 4294967295
ulong System.Uint64 8 0 ~ 18446744073709551615
single System.Single 4 接近 ±1.5 x 10-45 - ±3.4 x 1038 到七個有效位數
double System.Double 8 接近 ±5.0 x 10-324 - ±1.7 x 10308 到 15 或 16 個有效位數
decimal System.Decimal 12 接近±1.0 x 10-28 - ±7.9 x 1028 到 28 或 29 個有效位數
char System.Char N/A 2 Any UTF-16 character
bool System.Boolean N/A 1 true 或 false
建議 建議 永遠都不要使用 .Net Framework 型別,使用內建型別。

練習

[编辑]
  1. 宣告一些變數看看。
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy