最初に
言語によって、全角スペースが混入したときの挙動が違います。
各言語によって、どのような違いがあるのだろうかと思い、簡単に調べてみました。
Python・Javaは、検知してエラー
全角スペースが混じってるだけで、それを検知しエラーとして教えてくれました。
- Python(3.8.2)は、
SyntaxError: invalid character in identifier
と表示。 - Java(openjdk 15)は、
error: illegal character: '\u3000'
と表示。
Javaは文字コードまで教えてくれるので、親切ですね。
Rubyは、変数名に扱えてしまう
Rubyでは、日本語も変数名に使うことができ、全角スペースも変数名に使えてしまいます。
= "Hello, world!"
p # "Hello, world!"
上記のコードは、全角スペースに文字列を代入して出力してます。
そういうわけで、もし全角スペースが混じってもそれを検知し直接的なエラーをださず、
構文エラー(あるいは実行時エラー)となるので、デバッグ難易度が高い。
全角スペースの挙動にかんしては初心者泣かせですね。
HTML/CSSも、変数名に扱えてしまう。
いわゆるプログラミング言語ではないでしょうが、紹介します。
HTML/CSSもクラス名などに日本語を使うことができ全角スペースなども使えるようでした。
Rubyと同じく、全角が混じってしまうと初心者泣かせだと思います。
JavaScript
JavaScriptにおいて、全角スペースは半角スペースと同じ空白文字という括りです。
JS関連の派生言語もだいたい同じようです。
まぁ、全角スペースなんて半角スペースの幅が2倍になってるだけですから、
半角スペースと同じような挙動をして欲しいです。
C/C++は、コンパイラ依存
C/C++はコンパイラによって、全角スペースの扱いが異なるようです。
gcc
gcc(10.1.0)は、全角スペースを検知し、構文エラーになりました。
error: stray ‘\343’ in program
error: stray ‘\200’ in program
error: stray ‘\200’ in program
エラーが何を言ってるのか全然わからないです……。
clang
一方で、clang(10.0.0)では、次のように警告がでるのみで動きました。
warning: treating Unicode character as whitespace [-Wunicode-whitespace]
環境によっては、警告さえ出ないかもしれません。
最後に
けっこう言語によって、挙動・親切さが異なりますね。
何か参考になれば、幸いです。
他のプログラミングでの挙動についても書きたい方は、どしどしコメントお願いします。
参考
【参考】
全角スペースを許すプログラミング言語まとめ – プログラミング生放送(2015)