こんにちは、美味しんぼ はあんまりちゃんと読んだことがないyy_yankです。
社内で話題になってたので、気になり始めて調べて自分なりに整理したものを記事にしました。
間違ってたらご指摘ください
似て非なる、ややこしい用語
分配束縛、分割代入、分解宣言。
構文上はほぼ似たことを行っていそうなのに様々な名前が存在している。
こういうやつ
const [first, second] = [1, 2]
では、何がどうなっててどういう違いがあるか。
気になりますよね?
調べてみました!(いかがでしたか構文)
分配と束縛
-
destructuring-bind
-
ググったところ、On Lispが翻訳された2007年にはdestructuringを分配、bindを束縛と訳してたらしい
-
ググったところ、Practical Common Lispの翻訳された2008年にはdestructuringを分配、bindを束縛と訳していたらしい
-
分配束縛という言葉
-
destructuring(-bind)
-
プログラミングClojureという本で2010年頃に使われたらしい
-
分割代入という言葉
-
destructuring assingment
-
2010年にCoffeeScriptでこの言葉が実は登場していた
-
2015年頃、ES6で再登場した
- CoffeeScriptの流れで、訳語をそのまま使用してそうだけど、誰が良い感じに訳したのか。よくわからない
-
分解宣言という言葉
-
destructuring declaration
-
Kotlinは2016年頃に書籍などで使われ始めた
-
Kotlinの分解宣言とESの分割代入の違いは、がくぞさんの記事が詳しい(Scalaの話もあり) https://zenn.dev/gakuzzzz/articles/1fa87342be1f82
-
-
deconstruction declaration
-
C#でも分解宣言と言ったりするらしい(C# 7で入ったらしい)
-
ドキュメントでは Deconstruct variable declaration だろうか
-
単にdeconstructingと呼んでるかもしれない
-
destructuringではなくdeconstructingである理由などの意見
-
流れをまとめてみる
-
古くはLISPの文脈では destructuring(分配)があった
-
Clojureはそれを引き継いでいる
-
一方、CoffeeScriptでは destructuringを分割と訳した
-
ES6でそれを引き継いだ
-
一方、Kotlinでは destructuringを分解と訳した
-
一方、C#では deconstructionという単語を使い、分解と訳した
分配、分割、分解について
C#以外は、同じdestructuringなので訳語は揃えても良かったんじゃないかな感が個人的にはある(単語は違えど、C#も揃ってる方が誤解が少ない…んだろうか)。
分配、分割、分解。ここらへん揃ってなくても大きな支障はないといえばないし、普通の人にとっては些末な問題かもしれない。
ぶっちゃけ、どっちでも良いなとも思いつつも、機能的には類似しているのに表現のゆらぎがあるような感じがしてモヤッとするかも。
Kotlinでの分解という訳語について
特にKotlinに関しては、個人的に後悔する点かもしれない。
書籍での訳語が定着していく中で自分も意見を言えたといえば言えた※はず。
ただ、現在まで浸透しまっていて、ここから変更するのもややこしい話である。あと、当時はES6の分割代入も出始めた頃で時期が被ってたし、分配束縛も不勉強で知らなかったみたいなところは自分としてはある。
※ Kotlinインアクションとか、たろうさんの本とか、コミュニティに対して呼び方こうしようとか提案したりなど出来たかなぁと。別に自分は偉くもなんともないですが
束縛、代入、宣言について
それぞれの言語ごとの仕様は異なっていたりするし実現方法も異なる。
そのあたりで各言語、destructuring のあとに続く言葉がバラバラになってるのだと思われる。
束縛、代入、宣言。それぞれ違うので安易に混同すると束縛警察、代入警察、宣言警察が来るかもしれないし来ないかもしれない。
まとめ
翻訳者からすると、原文を見ないでもスッと分かってもらえるようになっていてほしいが、訳語は本当にむずかしい。
ある意味で再発明なので、元の意味を損なわず英語から呼び方を変えるチャレンジであり、腕の見せ所であり、ミスると語弊があるという難しいもの。
分かった、全部英語で呼べば解決だ(?)
というのは半分冗談で半分本気で、訳語と原文の用語、両方覚えて良い感じに解釈しておくのがオススメです。
0 件のコメント:
コメントを投稿