Block Rockin’ Codes

back with another one of those block rockin' codes

truthy, falsy の訳について考えてみた。

追記

twitter 経由で、id:mnicovideo さんがこの件を id:dankogai さんに質問されました。

そしてそのレスポンスとして id:dankogai さんが以下のようなエントリを上げてくださっています。

404 Blog Not Found:"-y"は「っぽい」って訳していいっぽい

間接的になってしまいましたが、思わず弾さんに質問できた形になりました。弾さんありがとうございます!

内容としてはタイトルの通り「〜っぽい」が正解だろうということです。

そう。「悪い」のは原文なのだ。

だから邦訳もその「悪さ」が見えるものが望ましい。

なるほど。確かに、その通りかもしれません。
その「投げた」(原文参照)部分を含め、この絶妙な単語のいわんとするところを、
うまく「〜っぽい」以外ににできたら良かったんですけれども。

とはいえ、自分の携わってる文では、
これまで通り「値が "truthy" だった場合〜」といった表現を使って行くと思いますw

本文


JavaScript 関係の英文では 'truthy', 'falsy' という単語を目にすることがあります。
しかし、実際には JavaScript 以外の LL 系言語でも出現することがあるようで、
英文にあるということはそれを訳す機会もあるというわけです。


で、今まさしくその問題に直面しているんですが、これらをいったいどう訳したら良いのか分かりませんでした。
そこで、ちょっと真面目に考えてみたら、脱線したあげくよくわからないことになったのですが、書いておきます。

そもそもの意味

身近なところでは JavaScript: The Good Parts に出てきます。
そして、この言葉を広めたのも、この本の著者の Douglas Crockford 氏のようです。


解説は JavaScript 「再」入門 - JavaScript | MDN にも書かれています。

'truty', 'falsy' のそもそもの意味は、 Boolean の 'true', 'false' ではないんだけど、評価すると 'true', 'false' と振る舞うものです。(つまり 'false' も含みます)
論理演算等で暗黙的に変換されたときの値ですね。そこから 'true values', 'false values' とも呼ばれるようです。
JavaScript であれば、 'falsy' な値として以下のものがあります。

  • false
  • undefined
  • null
  • 0
  • NaN
  • ''
> false ? 'truty' : 'falsy'
'falsy'
> undefined ? 'truty' : 'falsy'
'falsy'
> null ? 'truty' : 'falsy'
'falsy'
> 0 ? 'truty' : 'falsy'
'falsy'
> NaN ? 'truty' : 'falsy'
'falsy'
> '' ? 'truty' : 'falsy'
'falsy'

'truthy' はこれ以外ということになります。


実は既にないの?


まあ、とりあえずググってみる訳ですが、以下のようなエントリが見つかりました。
truthyとfalsy - mizuno_takaakiの日記
水野さんが 2008年6月8日の記事で言われているので、
これは、恐らく2008年12月に発売した「JavaScript: The Good Parts」の翻訳にあたってなんだろうと思われます。


のびーの食っちゃね〜だらだらな日々。食っちゃ寝生活してても意外と平気だったりする。 : JavaScript の trushy / falsy な値。
こちらでも大体同じことが書かれています。


いずれも 'truthy' 、'falsy' が何をさすのか周りの話で、訳は当てていないようですね。
ちなみに JavaScript Good Parts をみても、説明があっても訳はあたっていません。


つまり、定番な訳はまだ無いってことかのかな。

'truthy', 'falsy' の訳を考える

'true', 'false' がそれぞれ「真」「偽」と訳されていることを前提にすると、
感覚的に言えば「真っぽい」「偽っぽい」な感じかと思います。
(ただこれをまた訳すと 'true like', 'false like' になってちょっと微妙だけど)


しかし、まあそれなりの文を書く上では、もう少し良い単語を振ってあげたいものです。
まず思いつくアプローチとしては「接頭辞」を付けて、それっぽくしたい、という感じ。

接頭辞 + (真|偽)

何が妥当な接頭辞かを考えるとこんなのが浮かびます。

「完全な true, false ではない」、みたいなニュアンスで、
「程度を軽くする」といった接頭辞を探す。英語で言うと「セミ」とか「サブ」とかの感じ。


参考までに「日本語ってどんな接頭辞があったっけ?」を調べると、ど真ん中の論文が出てきたので、参考にさせていただきました。


現代日本語の接頭辞について(PDF)


文字のコピーはガードされているようなので、引用は控えて最小限で書くと、
英語で言う「セミ」にあたるのがやっぱり「半」「準」であることがわかります。
「半」「準」の説明も大方想像したもの。結果。

  • 半真、半偽
  • 準真、準偽

前者は「半信半疑」と同じ読みだし微妙。「準」を使った方がしっくりきますね。

準真/準偽

それっぽい候補を得たところで、とりあえずこれをググってみる。


「準真」や「準偽」単体だとノイズが多すぎるんですが、「準真偽」でググると、、
なんか二件ほど引っかかった。


いずれも同じコンテンツの違うページ。コンテンツのホームは


ISO標準Lisp言語ISLISP処理系

このページでは、ISO標準Lisp言語ISLISPの言語処理系TISL (Tohoku university ISLisp)の紹介と、 ソフトウェアの配布について説明します。

なるほど、「全ての道は LISP に通ずる」という訳か。。


で、検索に該当したページはこちら。


後者から引用

真偽値
値 t 及び 値 nil は、真偽値 (boolean) と呼ばれ、 t は真を表し、nil は偽を表す値となります。
述語 (predicate) 又は真偽値関数 (boolean function) は、その引数が条件を満たす場合は t を返し、そうでなければ nil を返します。
nil 以外を真として扱う場合、オブジェクトを 準真偽値 (quasi-boolean) と呼びます。


うーんここだけ読んでも良くわかりませんが、一つ確かなのは、この方が訳した「準真偽値」の元は 'quasi-boolean' だったということ。
quasi=「半、準、類似の」といった意味だから、なんかまあ意図してるのは同じことなのかな。

"quasi-(true|false)" = "準(真|偽)"

ちなみに google 翻訳に 'quasi-true' を突っ込むと「準真」と出ます。
つまり「準真」「準偽」という言葉を使った場合は、それを逆に英訳した時 'quasi-(true|false)' になってしまう恐れがあるということです。
英語と日本語が一対一に対応しなくなる。

'truthy' -> 「準真」 -> 'quasi-true' ..

ISLISP の quasi-boolean


そしてもう一大事なのは、「'quasi-boolean'って何なのか?」です。
ここを読んでも正直良くわからなかったのですが、一応ドキュメントの本家をたどってみました。


Programming Language ISLISP Working Draft 20.3(PDF)


さっきのページはこのドキュメントの翻訳みたいですが、版が違うのか、若干内容が多いようです。
しかし、予備知識が足らなすぎてその辺を読んでも良くわからない。。
が、なんかこう同じようなニュアンスは感じなくもありません。

考察


そろそろ脱線し過ぎたことに気がついて、我に返る。


そもそも、本来 JavaScript で「真偽値に変換すると真(True)になる」を表すのに 'quasi-booleans' が使えるなら、きっと使っているはずです。。
そうだとすると、恐らくこの 'quasi-booleans' は 'truthy', 'falsy' を置き換えることができないということになる。
ということは 'quasi-boolean' の和訳に使われる「準真」「準偽」を 'truthy', 'falsy' の和訳とするのは適切ではない。気がする。

結論

'truthy', 'falsy' の和訳は「準真」「準偽」ではだめっぽい orz

あとがき

疲れたのでここまで。。
だれか適切な訳があったら教えてください。
(あと 'quasi-boolean' の周りも教えてLISP界の偉い人。。)



とりあえず、「値が 'truthy' だった場合は、、」みたいにするのが現実解か。
そもそも、何でも訳そうとせずってかもう翻訳とかやめて原文を読んでニュアンスを(ry