反論ってわけじゃないですけど、(&)がVBにおいてはbit AND演算として用いられない(一意的な演算子)であればまだ良いんですが、(話がこんがらがりそうなので、スレッドを分けます)
QT: fedibird.com/@the_kwa/11249673
[参照]

くゎ  
プログラミング言語で文字列結合に「+」を使うの、数学的な加算演算子と言うより、「Fediverseは "federation" + "universe" のかばん語です」みたいな説明に使われる散文的表現由来なのでは? という感想(​:bt:​記事の根本からひっくり返しにかかるツッコミ) とはい...

@opaupafz2 完全に横道ではありますが、VBの&演算子については心配ありません。
VBでの&は文字列同士のみに定義されていて、それどころか前後の型を文字列に拡大変換しようとするぐらい文字列志向の演算子です。
つまり、&を使った場合、くっつけた文字列が返るか、ダメなら型変換エラーになります。
ちなみに、VBのbit演算は「And」演算子です。「And」演算子にはBoolean演算のパターンもありますが、今ではBooleanには「AndAlso」演算子を使うのが主流ですから、気にすることはないでしょう。

……と、ここまで書いた上でアレなんですが、現在のVBには演算子のオーバーロードがあるため、演算子前後の型を完全に把握していない限り、そのコードから何が起こるかは結局確定できなかったりします(台無し)

@the_kwa まったく別の使い道をするような演算子オーバーロードをする人が、いるとは思いたくないですね・・・(趣味ならまだしも、実用とかで使われたら・・・ :blobcatscared: )

たとえばC++やPythonのように型エラーになるなら演算子オーバーロードとかはまだ良いんですけど、中には、片方の型が異なると、暗黙で型変換をしちゃうような言語があるんですよ・・・

(ちなみに余談ですが、演算子オーバーロードの例で言うと、C++の(<<)、(>>)も主観ですが、かなり変なオーバーロードをしていると思います(公式))

@opaupafz2 おそらくJavaやらそのあたりのことを念頭においてのことだと思うのですけど、あの文字列型に合わせていく挙動、個人的にはいうほど違和感ないのですよね。
数値を起点に考えるとWhy!?!?!??!?になるのも理解できるのですが、「Stringクラスに【数値型との間での拡大変換&演算子オーバーロード】が定義されている」と考えるとめちゃくちゃ素直な挙動なのですよ。

@the_kwa 結局のところ、演算子を別々にしたうえで型変換するならわかるのですが、オーバーロードをしたうえであのような挙動になっているのが、まぁ最終的には主観になってしまうんですが、自分にマッチしていないんですよ。
あと経験上、暗黙型変換に頼ったコードはバグの原因になりやすいので、できれば型エラーになってほしいなぁというのが個人的なところです

@opaupafz2 そうですねぇ、究極的には好みの問題、極端に言えばそれこそ"宗教"的な話になってくると思います。演算子オーバーロードや暗黙の型変換をどこまで認めるかのラインは難しいですよね。
もっとも、JavaScriptのほうは型変換の問題というより、変数そのものには静的な型がないし決めようがない言語仕様の限界という感じがしますが…… :blobcat_daradara:

@the_kwa この辺りは、実行時に行われる動的検査が、どこまでサポートしてくれるか、というところにあると思います。同じ動的型付けでも、Pythonは動的検査時に型もチェックしてくれますが、JSはnull・undefinedであるか、そうでないか、ぐらいしかチェックしてくれません。それ故に、AltJSに乗り換えようって人がちらほらと・・・

フォロー

@opaupafz2 その検査の話も、結局は互換性問題が理由でどうしようもないんですよね……。検査を厳しくしてしまえば「この目の前にある古いコード」が動かなくなりえますから。
だもんで、静的検査とトランスパイル時に解決できる問題は事前に片付けておこうというAltJSに流れるのもやむ無しですよね。難しい話です。

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。