GDScript
上のチュートリアル参照
基本的にはpythonと同じ
個人的に注意すべき記法をメモる
三項演算子
他の言語では? の場合が多い
ぶっちゃけ、紛らわしい
(elmやhaskellのif式みたいなのならいいのに)
code: Ternary-if.py
var x = 10 if bool else 20
match文 : パターンマッチ
パターンマッチあるんだ。
ベース元のpythonにないものがあるとは、やりおる。
code: match.py
match x:
1:
print("It's one!")
2:
print("It's one times two!")
4, 5, 6: # switchのようにbreakを無視したcascadeはないが、複数パターンの指定はできる。
print("4, 5, 6")
var new_var: # 変数に入れる。他にマッチするものがなかったらこれがデフォルト
print("It's not 1 or 2, it's ", new_var)
_: # ↑の変数を捨てるバージョン
print("nothing")
Listも行ける。
文字列も行ける
辞書も行ける。
Dictionary
いわゆる、ハッシュ型
2種類の定義方法がある。
code: dict.py
# python style
var player = {
"name": "Thor",
"location": "Castellion",
"energy": 67
}
# Elm, Haskell style (record)
var d = {
a = {
a1 = {
a11 = 1, a12 = 2
},
a2 = 3
},
b = 1
}
Class
Godotでは、新しいClassを作ることができるが、
Classというようなキーワードはない
基本的に、Class = Node であり、
インスタンス化したNodeにスクリプトをアタッチしてクラスを作る。
基本的に、
1. 何らかのNodeをインスタンス化する
2. スクリプトをアタッチして、そのNodeを継承する (最小単位はextends Node)
3. class_name MyClass をスクリプトのどこかに書く
4. プロパティ/メソッドの追加、プロパティのexport(外部公開), メソッドのオーバーライドをする
5. シーンを保存する
これらの工程を踏むと、Nodeを追加するときに、そのシーンを選んでインスタンス化できる。
(Node名 = class_name )
Function
godotで関数を使うときは
自作する
すでに定義してあるものをオーバーライドして作る
のどちらか
関数の機能としては、
引数、戻り値の型を指定
クラス(Node)も型として指定できる。
デフォルト引数
などが使えて、高機能なような気もする。
lamda式などはなく、第一級オブジェクトではないのだが、
Godot3.2のロードマップに、関数を第一級オブジェクトにする計画があるのでそれを待つべし
code: func.py
# 引数の型 (typescript style)
func add_ints(a: int, b: int):
return a + b
# 戻り値の型 (Rust style)
func times_2(n) -> int:
return 2 * n
# 引数をNode2D型に指定 (interface)
# 実際にはNode2Dでなくとも、それを継承しているオブジェクトをNode2Dとしてダックタイピングできる?
func move_x(node: Node2D, dx = 1.5):
node.position.x += dx
move_x(self) # selfも引数として渡せる。
selfを引数に渡せるので、pythonスタイルの礼儀正しいオブジェクト指向、メソッド定義もできる。