Search…
メソッド
Vにはクラスというものはありません。しかし型に対してメソッドを定義できます。
メソッド(method)とは、1個のレシーバーを特殊な引数として持つ関数であり、指定された型に該当するレシーバーだけがこの関数を実行できます。 レシーバーは、fnとメソッド名の間に独自の引数リストを記述します。
1
struct User {
2
name string
3
email string
4
mut:
5
age int
6
}
7
8
fn (u User) can_register() bool {
9
return u.age > 15
10
}
11
12
fn (u mut User) has_birthday() {
13
u.age += 1
14
}
15
16
fn main() {
17
mut bob := User {
18
name: 'Bob'
19
20
age: 15
21
}
22
alice := User {
23
name: 'Alice'
24
25
age: 17
26
}
27
println(bob.can_register())
28
println("Bob needs to be 16 to register, but he only is ${bob.age}.")
29
println(alice.can_register())
30
bob.has_birthday()
31
println(bob.age)
32
}
Copied!
上の出力結果:
1
false
2
Bob needs to be 16 to register, but he only is 15.
3
true
4
16
Copied!
上のコードのレシーバーuの型はUserであることがわかります。 ここでhas_birthday()関数のレシーバーにmutが付いていることにご注目ください。データを変更したい場合はmutの指定が必要です。 Vのコーディング慣習では、selfthisといったレシーバー名は使いません。1文字のレシーバー名が推奨されます。

演習

1.Person型を対象として、未成年かどうかを調べるメソッドを作成しましょう。 2. Animal型について、毛が生えているかどうかを調べるメソッドを作成しましょう。
Last modified 2yr ago
Copy link
Contents
演習