人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

プログラマーの人教えてくださいっ!

プログラムで初心者とか(初心者じゃなくても)が間違えやすいコーディングミスのあるあるみたいなのを沢山知りたいです。

例えば、ループで終了条件を間違えて無限ループになっちゃったりとか、
==とふたつ書かないといけないのに=をひとつにしちゃったりとか
()を付け忘れて、変な条件判定になっちゃったりとかです。

なに言語でもいいんですけど、
正しいコードと間違ったコード、間違った結果どういうふうになっちゃうかを教えてくれたら嬉しいですっ

コーディングミスあるあるみたいなのです
コンパイルエラー? にはならなくて、動くけど間違って動くやつを教えてください

よろしくお願いします。

●質問者: みかんっ
●カテゴリ:コンピュータ ネタ・ジョーク
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● a-kuma3
●45ポイント

昔の有名なやつをひとつ。

 switch (n) {
 case 1:
 ...
 break;

 case 2:
 ...
 break;

 defualt:
 ...
 break;
 }

どうしても、デフォルトの処理が動かないんですよお、というやつ。
今どきの統合環境を使ってる人なら、はまらない(多分)。
正しくは、こう。

 switch (n) {
 ...

 default: /* default のスペルを間違ってた */
 ...
 break;
 }

文字列+コロンは、ラベルという goto の飛び先として文法上許されている書き方。
switch には default が無くても OK という罠。




あまりに古い気がしたので、もう少し新しいもの(と言っても、古い)。
PHP とか JSP とかみたいに、HTML の中に処理を埋め込めるタイプで、初心者がはまるやつ。

<form>
<input name=comment value=<?= $value ?> >
...
</form>

変数 $value が空白を含んだ値だと、HTML はこう展開されちゃう。

<form>
<input name=comment value=Hello World >
...
</form>

value=Hello だと扱われて、空白より後が紛失の憂き目に。

正しくは、こう。

<form>
<input name="comment" value="<?= $value ?>" >
...
</form>

こう展開される。

<form>
<input name="comment" value="Hello World" >
...
</form>

みかんっさんのコメント
さっぱりわからないので、解説お願いしてもいいですかっ?

みかんっさんのコメント
>> 正しいコードと間違ったコード、間違った結果どういうふうになっちゃうか <<

a-kuma3さんのコメント
追記しました。

みかんっさんのコメント
ひとつめのやつがすっごくいいですっ! ラベルだから、typoしてもエラーにならないってことですよね? 二つ目のやつは意味はなんとなくわかるんですけど、求めてた方向とは違っちゃってます。 でもありがとうございます。 いっぱい知りたいので、他にも思いついたらお願いします。

a-kuma3さんのコメント
>> 求めてた方向とは違っちゃってます。 << 「ソースコード」っぽいのが所望、ということですか?

みかんっさんのコメント
えっと、ソースもそうですけど、 ループが終わらない! とか 思ってたif文に入らないとか、 わかりやすい誤動作するのがいいです。 なんかそういうバグのあるゲームしてたら、どの選択肢を選んでも死んじゃうとか、 延々と同じシーンが繰り返されるとかなんかそんなの

2 ● holoholobird
●5ポイント

なんか文中の記号がはてな記法に引っかかるようなので、引用記号で囲みます。

・Iとl、mとn、意外とわからないDと0、pとqなどのスペルミス。
回答1のようなものも含みます。

特にこの手のエラーは発見が難しいので、コードエラーになると困ります。

・intやfloatなど、データ型を混合しすぎて桁落ちなどのエラーが起こる

・コメントアウトのし忘れ。
言語によってコメントアウトの記号を混用したりするケース。

//と<!--、/*を間違えるなどです

・if (a = b)とif (a == b)の混用。
前者はbをaに代入するだけなので、常に真になります。

等号ひとつ漏らすだけで一日エラーの原因探したこともあります。

・いらないと思って消した関数が実は重要なものだったケース

コメント化してもコードが見にくくなるので、
消してさっぱりして後で気が付くタイプのミスです。


3 ● cno
●5ポイント

最初に習うプログラム言語がJavaで、慣れないうちは
文字列の比較で??となる方は多いんじゃないでしょうか??(細かいnullチェックとかは省いてます)

例えばこんな感じで
String a="hello";
String b="hello";

if(a==b){
//ここには来ない
}

*正しくは
if(a.equals(b)){
//ここには来る
}


4 ● doradoratan
●5ポイント

データ例外的なのが一番多いのでは。

例えば、割り算で変数に0が来ちゃった場合

a = 2
b = 0
X = a / b ←ここでエラー

当たり前ですが、入力されたデータを事前にチェックすることで回避できますね。


5 ● Sampo
●40ポイント ベストアンサー

レースコンディションをご存じなかったようなのでご紹介しておきましょう。

なにかデータ処理があるとします。
データを見て、判断して、判断結果でデータをいじります。
で、この一連の流れの間にもしデータがいじられてしまったら、処理の結果は大混乱してしまいます。

(よく例えに引かれるのが銀行口座です。1000円引き出したいとき、【口座の残高を確認】→【それが1000円未満ならエラー終了】→【エラー出なければ先ほど確認した残高から1000減らした値を書き込む】という処理。
残高を確認したときには2000円あったのに、書き込むまでの間に他のATMで2000円下ろされていた(残高0円になっていた)ら…? 「1000円」という結果を書き込んでしまい、お金が増えてしまうことになります)

このように、作業中は机の上をいじられたくないのに、机を守り切れずにおかしな結果になったのがレースコンディションです。

ゲームだとたまに、アイテムをせーので同時に売買したときにアイテムの数がおかしくなるバグがあったりしますね。

数が狂うだけならまだましで、データがおかしくなるせいで処理が暴走してサービス停止だってありえます。


みかんっさんのコメント
おおっ! こういう名前がついてるって知りませんでしたっ! ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ