スクリプト/コツ/文法エラーを出しにくいスクリプトの書き方

最終投稿者:Material 6858 mini akasata 更新:2011/06/07 00:41:36
スクリプトを書く際、文法エラーに悩まされることがあります。
文法エラーの多くはスクリプトの書き間違えですが、以下のような
間違えが多いようです。

  • endを書き忘れている
  • カッコを閉じ忘れている

さて、Rmakeでスクリプトを書くと言うことは、プログラミングを
行っていることになります。昔から、プログラマは、プログラムを
書く際にこのような間違えをしないように、インデント(字下げ)を
行います。

良くないコードの例


良くないコードを見てみましょう。以下のようなコードは何が書いて
あるのかわかりにくいものです。このようなコードだとどのような
バグが紛れ込んでいるのかわかりません。

(実際、以下のコードは文法エラーを含んでいます。)

if getVariable("なにがしか") == 1
speak("これこれ")
case getVariable("ほげほげ")
when 0
speak("0ですな")
when 1
speak("1ですよ")
else
speak("ほげほげ")
end


良いコードの例


上記のコードを書き直すと以下のように整形することができます。
これが、インデントの整ったコードです。上記のコードでは見つけ
にくかったのですが、下記のコードでは、caseのendが閉じられて
いないことが一目でわかります。

(つまり文法エラーが発生しています。)

if getVariable("なにがしか") == 1
  speak("これこれ")

  case getVariable("ほげほげ")
  when 0
    speak("0ですな")
  when 1
    speak("1ですよ")
else
  speak("ほげほげ")
end


正しいコードは以下のようになります。

if getVariable("なにがしか") == 1
  speak("これこれ")

  case getVariable("ほげほげ")
  when 0
    speak("0ですな")
  when 1
    speak("1ですよ")
  end
else
  speak("ほげほげ")
end


このように見た目に見やすいコードを書くことを心がけることによって、
エラーやバグの発生を抑えることができます。

皆さんも、ぜひ美しいコードを書くことを心がけてみてください。

コメントする

コメントするには、ログインする必要があります。

コメント一覧

      128128 mini madousioz(投稿日:2011/06/07 00:41, 履歴)
 )で閉じてないとか?見ると[ case speakWithSerect(2,] が閉じてなくて怪しいけど
User icon mini 退会したユーザー(投稿日:2011/06/07 00:34, 履歴)
↓あ、endを書き忘れましたがそれではないです。
User icon mini 退会したユーザー(投稿日:2011/06/07 00:33, 履歴)
case speakWithSelect(2,
"はい",
"いいえ",
"聞きたいか?100G貰うぞ。(現在 getVariable("Gold") Gold)"

これの最後の行、何度やっても間違ってるっていわれるんですが・・・
どこが間違ってるのですか?自己解決できません!
  1 mini 闇さん(投稿日:2011/05/28 02:56, 履歴)
ありがとうございます
   mini ___(投稿日:2011/05/26 07:01, 履歴)
コードを提示する場合は、Rmake記法に則って、{{{code~}}}を利用してください。
見やすいコードを載せるのが、少なくとも質問に回答されるための第一歩だと思います。(私は、ですけど。

さて、エラーの内容ですが、エラーメッセージそのままです。
返し括弧「)」が抜けていますね。
 setVariable("Gold" ~
の部分をよく見なおしてみてください。
  1 mini 闇さん(投稿日:2011/05/25 22:48, 履歴)
↓のやつカラフル 3, 2 action : syntax error, コードに文法的な間違いがあります。 line(行): 11
  1 mini 闇さん(投稿日:2011/05/25 22:33, 履歴)
↓これ何が間違ってるのかわからない
case speakWithSelect(3,
"6424 攻撃  10",
"6493 カネーバッチ  20",
"♪いーらーなーい♪",
"何を買いますか?")
when 0 buyItem(6424, "攻撃", 10)
speak("現在のGold ", getVariable("Gold"))
when 1 buyItem(6493, "カネーバッチ", 20)
speak("現在のGold ", getVariable("Gold"))
when 2speak("いらないのかよ")
speak("テストだからGoldあげる")
setVariable("Gold", getVariable("Gold") + 10
speak("現在のGold ", getVariable("Gold"))
end

User icon mini rumo(投稿日:2011/01/03 10:41, 履歴)
speak("・・・確か今日はクリスマス・・・あ~!プレゼントだー!")
speak("あれ?なにかメモが挟まっている・・・")
case speakWithSelect(2,"読む","読まない",
"メモを読みますか?")
  when 0
  speak("どれどれ、プレゼントは慎重に開けてね?じゃあ慎重に開けよう")
  showCenterImage(38917)
  speak("あ!タマゴだ!")
  case speakWithSelect(3,"捨てる","卵焼きにする","育ててみる",
"このタマゴをどうしますか?")
    when 0
    speak("捨てるか・・・もったいないけど・・・")
    goBadEnding()
    when 1
    speak("でかーい!タマゴ焼にして食っちゃおう!")
    speak("ムシャムシャ!")
    speak("う・・・お腹が・・・")
    speak("パタリ・・・")
    goBadEnding()
    when 2
    speak("よし・・・育てるか・・・")
    case speakWithSelect(3,"タマゴを隠す","昼寝をする","卵を割る",
"なにをしますか?")
      when 0
      speak("お母さんに見つかったら大変だ!タマゴを隠しておこう!")
      speak("・・・数日後・・・")
      speak("あれ?卵にひびが入っているぞ?")
      speak("おお!動いてる!")
      speak("われた!")
      hideCenterImage()
      showImage(38922)
      speak("ドラゴンが生まれたぞ!")
      case speakWithSelect(3,"散歩に出かける","家で鍛える","ペットショップに売る",
"これからどうしよう・・・\n\nこれからどうしますか?")
        when 0
        speak("よし!散歩に出かけよう!")
        speak("ガチャ")
        speak("バサバサ!")
        speak("待て!ドラゴン!")
        case speakWithSelect(2,"ひとまず冷静に","警察に報告",
"このままだとドラゴンは逃げられてしまいます!どうしますか?")
         when 0
         speak("ここは冷静になろう・・・あ!戻ってきた!")
         speak("ドラゴンは戻ってきた!")
         speak("ドラゴンの飛ぶ力が3上がった!")
         case speakWithSelect(2,"パソコンをやる","森で狩り",
"どうしますか?")
          when 0
          speak("ん?")
          speak("ドラゴンの大会?")
          playSound(16423)
          speak("わお!俺の町でドラゴンの大会があったなんて!")
          speak("今度行ってみよう!")
          speak("ドラゴンの最大体力値が2上がった!")
          changeScene(11566)

          when 1
speak("森で狩りをした!")
speak("体力が5減った!")
speak("体力最大値が2上がった!力が3上がった!狩りの能力が4上がった!経験値を5手に入れた!技術が3上がった!飛ぶ力が4上がった!")
changeScene(11566)

end

         when 1
         speak("警察に行くぞ!")
speak("あの~ドラゴンに逃げられてしまいました!")
speak("警察「ドラゴンなんているわけないでしょ^^」")
goBadEnding()
end

when 1
speak("家で練習した!")
speak("ドラゴンの力が5上がった!")
playSound(25541)
speak("技、ひのこを覚えた!")
case speakWithSelect(2,"パソコンをやる","森で狩り",
"どうしますか?")
when 0
speak("ん?")
speak("ドラゴンの大会?")
playSound(16423)
speak("わお!俺の町でドラゴンの大会があったなんて!")
speak("今度行ってみよう!")
speak("ドラゴンの最大体力値が2上がった!")
changeScene(11566)

when 1
speak("森で狩りをした!")
speak("体力が5減った!")
speak("体力最大値が2上がった!力が3上がった!狩りの能力が4上がった!経験値を5手に入れた!技術が3上がった!飛ぶ力が4上がった!")
changeScene(11566)

case speakWithSelect(2,"パソコンをやる","家で訓練",
"何をしますか?")
when 0
speak("お!ドラゴンの大会なんてあるんだ~")
speak("参加してみるか")
changeScene(11566)

when 1
speak("訓練終了!何も起こらなかった・・・")
changeScene(11566)

end

case speakWithSelect(2,"パソコンをやる","家で訓練",
"何をしますか?")
when 0
speak("お!ドラゴンの大会なんてあるんだ~")
speak("参加してみるか")
changeScene(11566)

when 1
speak("訓練終了!何も起こらなかった・・・")
changeScene(11566)

end

when 2
speak("これ、いくらで売れますか?")
speak("ドラゴンは高値で売れた!")
goBadEnding()
end

when 1
speak("じゃあ暇だし・・・昼寝でもするか・・・")
speak("・・・1時間後・・・")
speak("あれ?卵がない!")
speak("おかあさ~ん!タマゴはどこにやったの?")
speak("お母さん「卵焼きにして食べちゃった!ごめんね~^^」")
goBadEnding()
when 2
speak("・・・やっぱりやめよう・・・")
speak("卵は卵焼きにして食べるのが1番だな")
goBadEnding()
end
when 1
speak("よし!プレゼントを開けよう!")
speak("?何か音がしたぞ?")
speak("ああ!プレゼントの中の卵が割れていた!")
goBadEnding()
end

とりあえず整理してみましたが
endが足りなすぎです・・・

User icon mini 宇宙神(投稿日:2010/12/23 19:24, 履歴)
1つのシーンの最後のところが文法的エラーって行っているんですがどういうことかわかりません・・・なんで文法的エラーなのか教えて下さい!



speak("・・・確か今日はクリスマス・・・あ~!プレゼントだー!")
speak("あれ?なにかメモが挟まっている・・・")
case speakWithSelect(2,"読む","読まない",
"メモを読みますか?")
when 0
speak("どれどれ、プレゼントは慎重に開けてね?じゃあ慎重に開けよう")
showCenterImage(38917)
speak("あ!タマゴだ!")
case speakWithSelect(3,"捨てる","卵焼きにする","育ててみる",
"このタマゴをどうしますか?")
when 0
speak("捨てるか・・・もったいないけど・・・")
goBadEnding()
when 1
speak("でかーい!タマゴ焼にして食っちゃおう!")
speak("ムシャムシャ!")
speak("う・・・お腹が・・・")
speak("パタリ・・・")
goBadEnding()
when 2
speak("よし・・・育てるか・・・")
case speakWithSelect(3,"タマゴを隠す","昼寝をする","卵を割る",
"なにをしますか?")
when 0
speak("お母さんに見つかったら大変だ!タマゴを隠しておこう!")
speak("・・・数日後・・・")
speak("あれ?卵にひびが入っているぞ?")
speak("おお!動いてる!")
speak("われた!")
hideCenterImage()
showImage(38922)
speak("ドラゴンが生まれたぞ!")
case speakWithSelect(3,"散歩に出かける","家で鍛える","ペットショップに売る",
"これからどうしよう・・・\n\nこれからどうしますか?")
when 0
speak("よし!散歩に出かけよう!")
speak("ガチャ")
speak("バサバサ!")
speak("待て!ドラゴン!")
case speakWithSelect(2,"ひとまず冷静に","警察に報告",
"このままだとドラゴンは逃げられてしまいます!どうしますか?")
when 0
speak("ここは冷静になろう・・・あ!戻ってきた!")
speak("ドラゴンは戻ってきた!")
speak("ドラゴンの飛ぶ力が3上がった!")
case speakWithSelect(2,"パソコンをやる","森で狩り",
"どうしますか?")
when 0
speak("ん?")
speak("ドラゴンの大会?")
playSound(16423)
speak("わお!俺の町でドラゴンの大会があったなんて!")
speak("今度行ってみよう!")
speak("ドラゴンの最大体力値が2上がった!")
changeScene(11566)

when 1
speak("森で狩りをした!")
speak("体力が5減った!")
speak("体力最大値が2上がった!力が3上がった!狩りの能力が4上がった!経験値を5手に入れた!技術が3上がった!飛ぶ力が4上がった!")
changeScene(11566)

end

when 1
speak("警察に行くぞ!")
speak("あの~ドラゴンに逃げられてしまいました!")
speak("警察「ドラゴンなんているわけないでしょ^^」")
goBadEnding()
end

when 1
speak("家で練習した!")
speak("ドラゴンの力が5上がった!")
playSound(25541)
speak("技、ひのこを覚えた!")
case speakWithSelect(2,"パソコンをやる","森で狩り",
"どうしますか?")
when 0
speak("ん?")
speak("ドラゴンの大会?")
playSound(16423)
speak("わお!俺の町でドラゴンの大会があったなんて!")
speak("今度行ってみよう!")
speak("ドラゴンの最大体力値が2上がった!")
changeScene(11566)

when 1
speak("森で狩りをした!")
speak("体力が5減った!")
speak("体力最大値が2上がった!力が3上がった!狩りの能力が4上がった!経験値を5手に入れた!技術が3上がった!飛ぶ力が4上がった!")
changeScene(11566)

case speakWithSelect(2,"パソコンをやる","家で訓練",
"何をしますか?")
when 0
speak("お!ドラゴンの大会なんてあるんだ~")
speak("参加してみるか")
changeScene(11566)

when 1
speak("訓練終了!何も起こらなかった・・・")
changeScene(11566)

end

case speakWithSelect(2,"パソコンをやる","家で訓練",
"何をしますか?")
when 0
speak("お!ドラゴンの大会なんてあるんだ~")
speak("参加してみるか")
changeScene(11566)

when 1
speak("訓練終了!何も起こらなかった・・・")
changeScene(11566)

end

when 2
speak("これ、いくらで売れますか?")
speak("ドラゴンは高値で売れた!")
goBadEnding()
end

when 1
speak("じゃあ暇だし・・・昼寝でもするか・・・")
speak("・・・1時間後・・・")
speak("あれ?卵がない!")
speak("おかあさ~ん!タマゴはどこにやったの?")
speak("お母さん「卵焼きにして食べちゃった!ごめんね~^^」")
goBadEnding()
when 2
speak("・・・やっぱりやめよう・・・")
speak("卵は卵焼きにして食べるのが1番だな")
goBadEnding()
end
when 1
speak("よし!プレゼントを開けよう!")
speak("?何か音がしたぞ?")
speak("ああ!プレゼントの中の卵が割れていた!")
goBadEnding()
end
User icon mini 退会したユーザー(投稿日:2010/10/02 14:04, 履歴)
↓間違えたw完成だったw
User icon mini 退会したユーザー(投稿日:2010/10/02 14:01, 履歴)
おかげで成功に一歩近づけました!
User icon mini 退会したユーザー(投稿日:2010/10/02 14:01, 履歴)
私もどこで間違っているか整形すると簡単にみつかりました!
       mini ハハハ(投稿日:2009/11/28 15:48, 履歴)
自分はいつも整形していない、片付いていない馬鹿者ですw

もう少し、美しく書くように心がけてみます!