基础

基础 属于 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 编辑 该链接会在新窗口或标签页中打开

学习 基础