剛好看到:求1到50之間所有偶數的平方值總和,於是順手寫一寫:
// // Sum all even in 1~50 // import System sum = 0 for i in range(1,51): if i%2==0: sum+=i*i print sum
Just thinking more…
剛好看到:求1到50之間所有偶數的平方值總和,於是順手寫一寫:
// // Sum all even in 1~50 // import System sum = 0 for i in range(1,51): if i%2==0: sum+=i*i print sum
心不在焉地看完了三部片…
基本上迴圈有兩種:for 與 while。
for 與一般語言的 for 不太一樣,反而與 foreach 比較類似,為了要能得到一個 Enumerator,通常都搭配 range():
// 印出 0 到 4 for i in range(5): print i
while 也沒什麼特別的:
// 同樣印出 0 到 4 i=0 while i<4: print i i=i+1
Boo Primer還有提出所謂的 do-while,但實際上是運用 while + break + unless修飾詞來達成的:
// 也是印出 0 到 4 i=0 while true: print i i=i+1 break unless i<4
有 break,當然也有 continue:
// 印出 1 3 5 7 9 for i in range(10): continue if i%2==0 print i
另外再提一個關鍵字,就是 pass,這用來表示程式區塊內不做事情:
// 不會輸出任何結果,因為被 pass 掉了... i=2 if i%2==0: pass else: print "i!=2"
剛好遇到這種狀況,要依據字串的某字元然後做出陣列。所以很直覺地,就可以寫出這樣的代碼。
splitter = ( char(','), char('\n') )
fields = inputText.Split( splitter )
不過這段代碼足以讓人搞半天了,boo 會不讓你執行。
非常感謝Google 網上論壇 的Boo Programming Language群組:
正好解答了我的問題,原來要這樣寫:
splitter = ( char(','), char('\n') )
fields = inputText.Split( *splitter )
這真是太隱晦不明了…
Boo 的 if 述句與 python 相似:
i=5 if i>5: print "i大於5" elif i==5: print "i等於5" else: print "i小於5"
很簡單。這邊額外要提到程式區塊的概念,像 C# 是用 { },Pascal 用 begin end,Python 與 Boo 是用縮排來決定程式區塊,所以縮排使用的字元很重要,千萬不要混雜使用,否則你會錯的莫名其妙,在開發時,最好一開始就決定好要使用 tab 字元或是特定數目的空白字元。
運算式,可以使用 and, or 來作連接,或是使用 not 來表示需要相反的條件式。
i=7 if i>=5 and i<=10: print "i 介於 5~10 之間" else: print "超出範圍" if not i==5: print "i不等於5"
如果你沒接觸過 perl/python/ruby/php 的話,以下的用法應該會讓你感到新奇:
s="sad" unless s=="sad": print "Hello world!" print "Hello world!" unless s=="sad" print "I am sad" if s=="sad"
unless 是反面的 if,把它想成 if not 就對了,所以第三行並不會被執行。
此外,unless 與 if 也可以用來修飾前面的述句﹔以第四行來說,unless s==”sad”用來修飾前面的 print “Hello world!”﹔以第五行來說,if s==”sad”用來修飾前面的print “I am sad”﹔當條件符合時,才會印出。
因此第四行的 “Hello world!” 不會被印出,而第五行的 “I am sad” 則會被印出。
這些用法會讓人覺得程式也很口語化~
今年(2008)四月的統計結果(TIOBE Programming Community Index for April 2008),C#只排到 8,Boo 排到 57。
有趣的是,Visual Basic 與 FoxPro/xBase 居然名次還往上衝了~Visual Basic 排到 3,FoxPro/xBase 排到 17。
兩天衝完四部片,夠猛!不過只有一部片我覺得比較好看~
Boo 的變數宣告方法很簡單,就跟大多數的 script 語言一樣,指定即用。
比較特別的地方有三個:
// var.boo
i = 100
s = "Hello world ${i} times!!"
print s
// 如果把 100 指派給 s,就會發生錯誤
// s = 100
// Boo Primer 說可以像下面這樣寫,但經過我試驗,是不行的。
// s as int = 200
// 但這樣寫,卻是可以的
o as object = 300
print o
o = "I am object"
print o
print """Hello
Line1
Line2
Line3"""
Boo 官方建議不要特別花心思去寫 <variable> as <type> = <value> 這樣的語法,盡量使用 <variable> = <value>。
經過編譯(booc -target:exe var.boo)以後,再用 reflector 去反組譯,產出的C#代碼如下:
private static void Main(string[] argv)
{
int num = 100;
Console.WriteLine(new StringBuilder("Hello world ").Append(num).Append(" times!!").ToString());
object obj2 = 300;
Console.WriteLine(obj2);
obj2 = "I am object";
Console.WriteLine(obj2);
Console.WriteLine("Hello\r\nLine1\r\nLine2\r\nLine3");
}
從反組譯出來的結果看來,Boo都幫你自動處理好了,的確是不用特別花心思去寫。