質問: Slime(name: "スライム", level:2) monster.atackMonster(slime) // モンスターはスライムを攻撃した。 slime.atackMonster(monster) // スライムはモンスターを攻撃した。 slime.escapeFromMonster(monster) // スライムはモンスターから逃げた ``` こちらのコードの`func attackMonster(enemy: Monster) {print ("\(self.name)は\(enemy.name)を攻撃した。");}`ここの部分なのですが、「attackMonster」の引数に「Monster」とあるのですがこちらは、Monsteクラスであることを表しているのでしょうか? しかし、そうだとすると、「enemy.name」は「self.name」でも良い気がします。 こちらの部分について、関数について検索するなどし調べたのですがいまいち分かりませんでした。 今回の疑問点につきまして、アドバイス頂けましたら幸いです。
回答: > > 「attackMonster」の引数に「Monster」とあるのですがこちらは、Monsterクラスであることを表しているのでしょうか? > > > はい、Monsterクラスのインスタンスを引数で受け取ります。 > > しかし、そうだとすると、「enemy.name」は「self.name」でも良い気がします。 > > > もちろんそれでもコンパイルはできますので、実際に置き換えてやってみるとどうなるか試してみてください。 ``` func attackMonster(enemy: Monster) { print("\(self.name)は\(self.name)を攻撃した。"); } ``` と置き換えると ``` slime.atackMonster(monster) ``` の部分で`スライムはスライムを攻撃した。`と表示されてしまいまうかと思います。 この関数は 「自分」が「引数に渡されてきたモンスター」を攻撃する ための関数なので、元の通り ``` func attackMonster(enemy: Monster) { print("\(self.name)は\(enemy.name)を攻撃した。"); } ``` `スライムはモンスターを攻撃した。`で合っています。