Avatar
Avatar
niw
#beginner-help でもちょっと前に話題になった、そして多分なんどもここでも話題なってる struct で let つかう意味ないよ問題について、質問された時にぱっと使いまわせるようにまとめてみたんですが、ご興味あるかたレビューしていただけますと嬉しいです。
  • 間違ったこと言ってないか (言ってるかも)
  • 補強した方がいい背景がないか
  • 厚みを増す追加要素はあるか
みたいな感じで。想定読者は Code review で struct に let 使ってしまったケースをみつけたときに、なぜそう書くのが良くないのかを毎回説明する(そしてバトルになる)のを避けるためにこのリンクを貼る、みたいな感じです。もともとそういう説明をした時に書いたものを多少改変した内容です。 このドラフトは清書してどこか permalink のある場所で public にします。 https://gist.github.com/niw/f41b83aa431d991b171b1ccfbce8fc10
(edited)
@niw おお〜素晴らしい取り組みですね。読みました。 特にnominal tupleというキーワードによって分かりやすくなってると思います プロパティをletにしても迂回できて意味がないこと、 何かmutationを追加したくなったときにその迂回が煩雑になるだけであること、 varが有効な例外があること が書かれていてバッチリだと思います。 個人的には人々が let を付ける動機として、 Javaの時代(やそれを継承した参照ベース言語のプラクティス)の immutable object pattern の影響を受けていて、 盲目的に「プロパティは定数にするべき」と思い込んでいる場合があると思っています。 それが value semantic な Swift の struct においては適用できない事、 つまり、(例としてSwiftの) class と struct では変数自体の mutability とオブジェクトのプロパティのmutability の関係が異なる というか var base struct がすでに immutable object pattern と等価な振る舞いをする、 という事を説明するといいのかなと思っていますが、冗長・蛇足かもしれません。
👍 1