やわらかテック読者になるやわらかテック興味のあること。業務を通して得られた発見。本読んだぞトレイト(trait)すごい「コンセプトから理解するRust」を読んで衝撃を受けました...。トレイト(trait)は今まで自分が出会ったことがない概念です。技術評論社Amazon多くの言語ではinterfaceや基底クラスを作って「あなたはこの関数orメソッドを実装してください」というルールを定めることが出来ます。pythonであれば、以下のコードのように基底クラスを作成して、継承させることで実装が出来ます。nameこのように基底クラスを継承、interfaceに対して実装するという方法が従来の方法かと思うのですが、Rustの場合はトレイト(trait)と呼ばれるものを使用します。トレイトは構造体に対して1つ1つ実装することが可能で、不要であれば実装しなくても構いません。MetalSlime{};}「ふーん、そうなんだ」という声が聞こえてきますが、面白いのはここからです。仮にMonasterに体力を返すhpという関数を実装します。先ほどのpythonの例であれば基底クラスに新しくhpという関数を作成して継承先のクラスで実装するようにルール化するか、もしくはそれぞれのクラスでhpを適宜、追加します。70特筆することはありません。次はRustのコードへのhpの追加を行います。MetalSlime{};}こちらも同じく、Monsterトレイトに対して新しくhpを追加して、それぞれの構造体に対するimplでhp関数を実装しました。attack)を実装します。スライムは必殺技は使えず、キングスライムは必殺技が使えるものとします。必殺技の有無はモンスターによって変わるため、別の基底クラスを用意して実装してみます。ダメージ=100pythonの場合は別の基底クラスを用意して、それをKingSlimeクラスに継承させました。継承したKingSlimeクラスのコードには当然ながらsp_attackが追加されました。次にRustの場合ですが、新しくSpecialAttackというトレイトを作成します。MetalSlime{};}先程のpythonのコードとの一番の違いは既存のコードに対して全く手を入れていないという点です。pythonでは基底クラスを作成後、継承して、継承したクラス内に新しい関数を作成しましたが、Rustでトレイトを使った場合は既存コードに手を加えることはなく、必要な構造体だけトレイトを実装すれば良いです。既存のコードに手を加えなくても良いというのが、コード品質、安全性、ファイル分割などの視点で見れば非常に優れています。Haskellにはtypeclassという概念がありましたが「必要なら実装してね」という点で非常に似ていると感じました。www.okb-shelf.work当時、Haskellを触っていた時に、なぜ感動しなかったのか分かりませんがRustのトレイトを知って衝撃を受けました。自分のおすすめは「コンセプトから理解するRust」という書籍です。文法や型とかはいいから、とりあえずRustの概念に触れたいという自分のような方にはぴったりです。09:38Tweet関連記事2023-02-14【ええな〜コード】作って学ぶRailsのenumの仕組みについてRailsを使っていて何かと便利なのが「enum」です。他の言語で...2022-12-02Rspecのモック(double)はどのように作られているのか普段の業務でrspecのモック機能には非常にお世話になっています...2022-11-13vec型に対してiter関数からslice::Iterが返ってくるのはなぜかRustの学習を進めています。22:23名古屋発のベンチャーでWEBアプリのバックエンドをメインに作っています。エンジニア育成やチームビルディングにもちょっとだけ携わっています。3はてなブログをはじめよう!takamizawa46さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。