Raku 程式設計/基本操作
在過去的幾章中,我們一直在研究 Raku 資料以及儲存這些資料的變數。現在我們將探索在獲得資料後可以對資料執行哪些操作。Perl 有一系列常規的算術運算子,可以應用於整數和浮點數,甚至還有一些適用於其他資料型別的運算子。一旦我們瞭解了所有常規的運算子,我們就可以開始研究元運算子,它們採用相同的概念並將其應用於不同的上下文。
運算子在其運算元上工作 - 正在執行操作的數量。要理解任何運算子,您必須瞭解其元數(它採用多少個運算元)。如果它採用一個運算元,則稱為一元運算子;如果它採用兩個運算元,則稱為二元運算子;如果它採用三個運算元,則稱為三元運算子。
最簡單的算術運算子是一元符號運算子 + 和 -。這些應用於數值值的前部以影響該數字的符號
my Int $x = 5;
$y = -$x # Now, $y is -5
還有一個字首 + 運算子,它不會反轉符號。
Raku 具有許多算術運算子,與其他程式語言類似。
my $x = 12;
my $y = 3;
my $z;
$z = $x + $y; # $z is 15
$z = $x - $y; # $z is 9
$z = $y - $x; # $z is -9
$z = $x * $y; # $z is 36
$z = $x / $y; # $z is 4
$z = $x % $y; # $z is 0 (remainder)
算術運算子需要數字引數,因此引數將自動轉換為數字,就像我們使用上下文轉換器 +( ) 一樣。
my Str $x = "123";
my Str $y = "456";
my Int $z = $x + $y; # 579
my Int $w = +($x) + +($y); # Same, but more verbose
在 Raku 中,符號 ~ 始終與字串相關聯。當用作字首時,它將它所使用的任何變數都轉換為字串(如果之前不是字串)。當它用作兩個字串之間的運算子時,它會將字串首尾相連,這個過程稱為連線。
我們已經討論過使用 ~( ) 作為字串上下文說明符。這被稱為字串化。字串化將變數從其他型別轉換為字串表示。
兩個字串可以連線在一起以生成一個新的字串
my Str $x = "hello " ~ "world!";
~ 運算子會自動將任何不是字串的引數轉換為字串。所以我們可以這樣寫
my Int $foo = 5;
my Str $bar = "I have " ~ $foo ~ " chapters to write";
print $bar;
這將打印出字串:我還有 5 章要寫。
在大多數情況下,使用插值可能更容易,我們將在接下來討論。
我們之前簡要介紹過,字串有三種基本型別:雙引號字串、單引號字串和 heredocs。單引號字串和雙引號字串看起來可能很相似,但它們的行為卻不同。區別在於插值。
雙引號字串是可插值的。出現在字串內的變數名將被轉換為其字串值幷包含在字串中。單引號字串沒有此行為
my Int $x = 5;
my Str $foo = "The value is $x"; # The value is 5
my Str $bar = 'The value is $x'; # The value is $x
變數增加或減少一的運算非常常見,因此需要專門的運算子。++ 和 -- 運算子可以用作標量變數的字首或字尾。這兩個不同的位置存在細微的差異。
my Int $x = 5;
$x++; # 6 (increment is done after)
++$x; # 7 (increment is done before)
$x--; # 6 (as above)
--$x; # 5 (as above)
兩種形式,字首形式和字尾形式,在上面的示例程式碼中似乎通常執行相同的操作。程式碼 ++$x 和 $x++ 都執行相同的操作,但操作發生的時間不同。讓我們用一些例子來演示這一點
my Int $x = 5;
my Int $y;
$y = $x++; # $y is 5, $x is 6
$y = ++$x; # $y is 7, $x is 7
$y = $x--; # $y is 7, $x is 6
$y = --$x; # $y is 5, $x is 5
字首版本在變數在語句中使用之前執行遞增或遞減。字尾版本在變數使用後執行遞增或遞減。