こんにちは、Masakiです。
最近、「関数」「enum」「match」など、ごくごく基本的なことを色々と紹介してきましたが、今回は、ちょっと上の技術かなと思われる「メソット構文」について紹介したいと思います。
これもまた、Rustならではの書き方があるので楽しんで見ていただければなと思います。では紹介していきます。
メソット構文
C#や、PHPその他の多くの言語ではクラスを「new」することってありますよね「hoge = new Hoge();」みたいな。けどRustではそんな書き方はできません。「class」っていうのがそもそもないので……
そこで、「hoge = new Hoge();」のような感じのものをRustで書いてみたいと思います。
newを作成する
Rustで書くと上記のような書き方になります。ここで使うのは「impl」というものが必要になります。以前に「struct」については説明したものがあるのでそちらを見ていただければなと思います。
・main.rsコード
struct Character { hp: i32, mp: i32, } impl Character{ fn new(_hp: i32, _mp: i32) -> Character{ Character{hp: _hp, mp: _mp} } } fn main() { let mut character = Character::new(10,20); println!("{}",character.hp); }
・ゲッターとセッターを作ってみる
「new」ができたのでそれと同様によくある「ゲッター」「セッター」も作ってみたいと思います。
・main.rsコード
struct Character { hp: i32, mp: i32, } impl Character{ fn new(_hp: i32, _mp: i32) -> Character{ Character{hp: _hp, mp: _mp} } fn get_hp(&self) -> i32 { return self.hp; } fn set_hp(&mut self, _set: i32){ self.hp = _set; } } fn main() { let mut character = Character::new(10,20); println!("{}",character.get_hp()); character.set_hp(999); println!("{}",character.get_hp()); }
上記を実行すると「character.hp」の値が上書きされていることが確認できるかなと思います。
今こんな感じで少しはオブジェクト指向のコードが書けるようになれるかなと思います。すこし違和感あるかもしれませんが、なれると割と親しみを感じれるようになりますよ。(本当に)
あとがき
余談ですが、つい最近C#を触れる機会がありまして「ゲッター」「セッター」が手軽に掛けれて楽だなって思いました。あ、もちろん「Rust」は手間があるけど、面白い言語だと思って学んでますよ。ホントですよ!