search
LoginSignup
3
Help us understand the problem. What are the problem?

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)

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
What you can do with signing up
3
Help us understand the problem. What are the problem?