回答編集履歴

1

==が演算子でない、という間違いを訂正。Equatableプロトコルについて追記。

2019/12/05 07:09

投稿

eytyet
eytyet

スコア803

test CHANGED
@@ -8,8 +8,8 @@
8
8
 
9
9
 
10
10
 
11
- 余談ですが、`==`演算子じゃなくて、関数です。`3 == "3"`と書いたら、3と"3"を引数にとる`==`関数を探します。"3"はStringかCharactorだろうし、3はIntかFloatかDoubleか、その他いっぱいありますが、どれかに一致する`==`関数があったらそれにします。複数あったらエラーになるかと思いましたが、実際にはならなくて、どれかが使われます。
11
+ 余談ですが、`==`演算子の実体は関数です。`3 == "3"`と書いたら、3と"3"を引数にとる`==`関数を探します。"3"はStringかCharactorだろうし、3はIntかFloatかDoubleか、その他いっぱいありますが、どれかに一致する`==`関数があったらそれにします。複数あったらエラーになるかと思いましたが、実際にはならなくて、どれかが使われます。
12
12
 
13
13
 
14
14
 
15
- 関数なので、IntとStringを比較するような`==`関数を作ることも可能です。可能ですが、やらないほうがいいです。余程上手に設計しないと、想定していない動作をするようなコードになってしまい、保守性や可読性が下がると思います。
15
+ 関数なので、IntとStringを比較するような`==`関数を作ることも可能です。可能ですが、やらないほうがいいです。余程上手に設計しないと、想定していない動作をするようなコードになってしまい、保守性や可読性が下がると思います。また、プロトコル指向言語であるSwiftはEquatableというプロトコルを用意していて、それは同じ型のもの同士の比較を前提としています。独自の型についてEquatableに準拠するのは良いアイデアですが、違う型同士の比較をサポートするのは**Swift的でない**と思います。