LoginSignup
10
3

More than 1 year has passed since last update.

いくつかの言語での全角スペースの挙動

Posted at

最初に

言語によって、全角スペースが混入したときの挙動が違います。

各言語によって、どのような違いがあるのだろうかと思い、簡単に調べてみました。

Python・Javaは、検知してエラー

全角スペースが混じってるだけで、それを検知しエラーとして教えてくれました。

  • Python(3.8.2)は、SyntaxError: invalid character in identifierと表示。
  • Java(openjdk 15)は、error: illegal character: '\u3000'と表示。

Javaは文字コードまで教えてくれるので、親切ですね。

Rubyは、変数名に扱えてしまう

Rubyでは、日本語も変数名に使うことができ、全角スペースも変数名に使えてしまいます。

fullwidth_space.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)

10
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3