バグの原因がわからない。そんな時に。
2022.02.19
最近、プログラムが思うとおりに動かなくて難儀してます(;´Д`)
見た目やアルゴリズムは完璧。コンパイルも通る。
だけど結果がおかしい。

そんな時、長年いろんな言語に慣れ親しんだ人だけが陥る
罠があります。
それは判断文のイコールの扱い。



言語によって=と==の2つのグループに分かれることがわかります。
C以後に登場した言語は「==」を「等しい」としていて
昔に生まれた言語から派生したものは「=」を「等しい」としているようです。
問題なのは、C言語で if (c=0){ } と書いてもコンパイルが通ってしまうところ。
全く違う意味になってしまうためバグを呼ぶんですね。

私がプログラムを覚え始めたのはBASICが最初。
そのあと8086アセンブラ、COBOL、PASCAL、DELPHIと進み
その後、時代の流れに寄り添うためにCやPHP、Arduino、
最近はPythonと勉強したわけですが、
あ、基本情報はJAVAで受けたっけか(;´Д`)
こうやって混在していくと、
寝不足だったり疲労困憊になると
若いころに覚えたものが優位になり、
==の代わりに=を使って、
しかも間違いに気が付けないで何時間も浪費するという
事態に陥ります。
最近の言語しか知らない人は「==」で統一されてるので心配ないでしょうが、
もし歴戦の勇者が躓いていたとき、
このことを思い出してみてはいかがでしょうか?


ちなみに私の主力言語であるDelphi(Pascal)は
判断文で「=」を「等しい」を使いますが、
代入に「=」ではなく「:=」を使います。
変数管理も厳格です。あいまいな処理が少ないので
バグとりも容易です。Delphiの布教活動でした(;´Д`)
トラックバックURL
トラックバック一覧

- CafeNote -