基礎

基礎 在 Crystal

1 個練習

關於 基礎

Crystal 是一門編譯式的物件導向程式語言。 以下是這門語言的一些目標:

  • 深受 Ruby 啟發的語法。

  • 靜態型別檢查,但不需要指定變數或方法引數的型別。

  • 可以透過在 Crystal 中撰寫繫結來呼叫 C 程式碼。

  • 具備編譯期求值與程式碼生成,以避免樣板程式碼。

  • 編譯成高效率的原生程式碼。

Crystal 的開發始於 2011 年,目標是創造一門兼具 Ruby 的優雅與生產力,以及編譯式語言的效能與型別安全的語言。 這門語言的編譯器最初是用 Ruby 撰寫的,但在 2013 年以 Crystal 重寫。 Ary Borenszweig、Juan Wajnerman 和 Brian Cardiff 共同開發並設計了這門語言。

入門

變數

要宣告變數,請使用=賦值運算子。 在 Crystal 中,變數應採用 snake_case 格式。

number = 1
puts number # => 1

number = 2
puts number # => 2

常數

常數使用相同的=賦值運算子宣告,但使用全大寫字母,也就是 SCREAMING_SNAKE_CASE。

NUMBER = 1
puts NUMBER # => 1

將值指定給已定義的常數會導致編譯期錯誤。

NUMBER = 1

NUMBER = 2
# Error: already initialized constant NUMBER

型別

Crystal 是一門編譯式語言,這表示每個變數或方法引數都會在編譯期被賦予型別。 編譯器能夠推斷變數或方法引數的型別。 不過,在某些情況下仍需明確指定型別。 需要設定型別的情況會在後續的概念中說明。

方法

方法是一種將一組可重複使用的指令群組起來的方式。 在 Crystal 中,方法通常定義在類別、模組或結構內。 不過,方法也可以定義在類別、模組或結構之外。 方法使用def關鍵字宣告,後面接著方法名稱。 在 Crystal 中,方法應以 snake_case 命名。 當方法沒有任何引數時,可以省略括號。 要宣告方法的結束,必須使用end關鍵字。

def hello
  puts "Hello World!"
end

對某個型別的變數或方法引數使用不存在的方法,會導致編譯期錯誤。

number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String

引數

方法可以有引數。 引數是傳遞給方法的資料。 若要讓方法接受引數,必須指定引數的名稱。 在 Crystal 中,引數應以 snake_case 命名。 一個方法可以有多個引數,但引數之間必須以逗號分隔。

def hello(name)
  puts "Hello #{name}!"
end

方法也可以有多個引數。 在這種情況下,引數之間必須以逗號分隔。

def hello(name, language)
  puts "Hello #{name}! You are learning #{language}."
end

呼叫方法

呼叫屬於類別、模組或結構的方法時,必須使用點運算子(.)。 格式應為:<ClassName>.<method_name>。 當方法不屬於類別、模組或結構時,只要寫出它的名稱就能呼叫它。 方法一律會隱含地回傳最後一個運算式的值。

當方法有引數時,在方法呼叫與定義中指定引數可以使用括號,如下所示:<method_name>(<argument_1>, <argument_2>, ...)。 當方法沒有引數時,應省略括號。

def hello(name)
  "Hello #{name}!"
end

hello("Crystal")
# => Hello Crystal!

呼叫有多個引數的方法時,引數之間應以逗號分隔。 引數必須按照方法引數的相同順序提供。

def hello_language(name, language)
  "Hello #{name}! You are learning #{language}."
end

hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.

以錯誤的引數數量呼叫方法,會導致編譯期錯誤。

hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)

加法、減法與乘法

在 Crystal 中,可以使用+運算子將兩個數字相加。 也可以使用-運算子將兩個數字相減。 還可以使用*運算子將兩個數字相乘。

1 + 1
# => 2

2 - 1
# => 1

2 * 2
# => 4

註解

在 Crystal 中,註解是使用#字元撰寫,後面接著一個空格,然後是註解內容。 註解用來說明程式碼。 編譯器不會執行註解。

# This is a comment
透過 GitHub 編輯 連結會在新視窗或分頁中開啟

學習 基礎