跳转到内容

BOO大全/把Boo当作计算机

维基教科书,自由的教学读本

目录 下一章:变数与型别


把Boo当作计算器[编辑]

Guido van Rossum 在他的 python 书里,以在互动 Python 提示里输入运算式的方式带领人们进入 Python 的世界。这是个很好的建议,而我们最好也以同样的方式开始学习 Boo。Boo (与 Python) 都提供了足以作为计算器的良好互动环境,这环境除了一般的四则运算之外,也可以使用十六进制与位元运算。即便你是顽固的 C++ 或 C# 开发者,Boo 提示也是很有帮助的。 Boo互动选项

>>> 2.5+2*(1 + 0.234/4)
(System.Double) 4.617
>>> 23 + 24 - 4
(System.Int32) 43
>>> 0xFF
(Int32) 255
>>> 20/3
(System.Int32) 6
>>> 20/3.0
(System.Double) 6.66666666666667

Boo 的计算是很一般的计算器运算;计算时会自动使用运算式里可容纳最多位数的型别来呈现结果。浮点运算通常以双精度计算并且整数也会自动被转换。

看看整数运算,明显的会整除。

不靠好用的函数,工程计算器将无法完成。在 CLI 里,大部分的函式库都在 System 命名空间,而数学函式都在 Math 命名空间。使用 import 述句就可以使用这些命名空间;当然,类别也被引入,省去我们打字的麻烦。

>>> import System
>>> Math.Sin(1.4)
(System.Double) 0.98544972998846
>>> 2*Math.PI
(System.Double) 6.28318530717959
>>> import System.Math
>>> Sin(PI/2)
(System.Double) 1
>>> Min(10,20)
(System.Int32) 10
>>> Min(1.2,0.8)
(System.Double) 0.8

这些函式除了某些特定函数,如 Min 和 Max 之外,大部分都以双精度运作。Min、Max 例外的原因是因为提供了不同数值型别的覆载函数。要看 Math (或任何类别) 里面有什么的话,可以使用内建函式 help:

>>> help(Math)
class Math(object):

    public static E as double

    public static PI as double

    static def Abs(value as short) as short

    static def Abs(value as sbyte) as sbyte
     .....

此外也有位元运算,这与 C 家族语言很类似。而 Convert.ToString() 在要看十六进制结果时很有用 (第二个引数表明进制)。

>>> 1 << 2
(System.Int32) 4
>>> 16 >> 1
(System.Int32) 8
>>> 0xFFFF & 0x0FF0
(System.Int32) 4080
>>> Convert.ToString(4080,16)
(System.String) 'ff0'

另外一个很好的特性是,可以在写长串数字时,使用 _ 来适当的为数字分组。

>>> 20_000
(Int32) 20000
>>> 20_000_000.2
(Double) 20000000.2

使用者自订函式也很容易定义:

>>> def hex(n as int):
... 	print Convert.ToString(n,16)
... 
>>> hex(0xFF << 2)
3fc

Boo (与Python) 都需要对函式主体缩排,所以在输入 print 述句之前,先按下 tab ;要结束的话,就按下 Enter (是的,这会出现空白行)。不像 Python,Boo 通常会要求你宣告引数的型别 (请参见 函式) (译注:事实上可以不用,我想或许是 Boo 版本问题。毕竟作者写这文章时,是在 2005 年。)


目录 下一章:变数与型别