エラーメッセージ

値の種類(数字・文字・配列)が合っていません

数が大きすぎるか、小さすぎます

0で割り算はできません

命令の呼び出し方が間違っています

関数の呼び出し方が間違っています

変数に値が代入されていません

配列の要素に値が代入されていません

添字が0以上の整数ではありません

数字や文字に対して添字が指定されました

引数の数値が範囲外です

書き方が間違っています

dataが足りません

スプライトがありません

スプライト番号が範囲を超えています

PICパターンがありません

PICパターンに必要な数値の1次元配列ではありません

forがないのにnextがあります

forがないのにexit forがあります

nextがないのにexit forがあります

doがないのにloopがあります

doがないのにexit doがあります

loopがないのにexit doがあります

アニメーションがありません

背景がありません

背景に必要な数値の1次元配列ではありません

声が使えません

命令の呼び出し回数が多すぎます

命令が見つかりません

同じ名前の命令があります

end procedureがないのにprocedureがあります

procedure がないのに end procedure があります

同じ名前の変数があります

プロシージャの呼び出し回数が多すぎます

プロシージャが見つかりません

同じ名前のプロシージャがあります

プロシージャの引数の個数が間違っています

関数の呼び出し回数が多すぎます

関数が見つかりません

同じ名前の関数があります

関数の引数の個数が間違っています

end functionがないのにfunctionがあります

functionがないのにreturnがあります

returnが呼ばれずにend functionに到達しました

end procedureがないのにfunctionがあります

end functionがないのにprocedureがあります

文字列の長さを超えています

色の番号が範囲外です

同じ名前の変数があります

同じ名前の変数があります

nextの位置が不正です

ifがないのにelse ifがあります

ifがないのにelseがあります

ifがないのにend ifがあります

procedureの位置が不正です

functionの位置が不正です

end ifがないのにifがあります

nextがないのにforがあります

loopがないのにdoがあります

アカウント登録後に使用することができる機能です

ポート番号が範囲を超えています(1-65535)

接続を受け付けていません

Bindに失敗しました

エラーメッセージ

プログラムの実行中に何らかのエラー(プログラムの実行を継続できない状況)が発生すると、Jasmine Tea はエラーメッセージを表示して、プログラムが停止します。ここでは、エラーメッセージ、発生する原因、発生しないようにするための対策について説明します。

値の種類(数字・文字・配列)が合っていません

発生する原因

  • 数値変数に文字列を代入しようとした
  • 文字列変数に数値を代入しようとした
  • 式の中で数値と文字列を混ぜて計算しようとした
  • 数値を受け取るパラメーターに文字列を渡そうとした
  • 文字列を受け取るパラメーターに数値を渡そうとした
  • 数値を受け取る関数の引数に文字列を渡そうとした
  • 文字列を受け取る関数の引数に数値を渡そうとした
  • 配列変数に数値や文字列を代入しようとした
  • 数値変数や文字列変数に配列を代入しようとした

発生するプログラム例

// 数値変数に文字列を代入しようとした
age="47"
// 文字列変数に数値を代入しようとした
name$=12345
// 式の中で数値と文字列を混ぜて計算しようとした
title$="This year is "+2022
// 数値を受け取るパラメーターに文字列を渡そうとした
locate "20",10
// 文字列を受け取るパラメーターに数値を渡そうとした
play 12345
// 数値を受け取る関数の引数に文字列を渡そうとした
answer=abs("-47")
// 文字列を受け取る関数の引数に数値を渡そうとした
s$=left$(12345,2)
// 配列変数に数値や文字列を代入しようとした
a@=1
// 数値変数や文字列変数に配列を代入しようとした
a=[1,2,3]

発生しないようにする対策

文字列を変数に代入する際や、文字列変数を式の中で使う際に、変数名の末尾に「$」記号を付け忘れることがあります。文字列変数を扱う際には、変数名の末尾に「$」記号を忘れていないかどうか確認しましょう。

また、配列変数では、変数名の末尾に「@」記号をつけなければなりません。これを忘れると、数値または文字列の変数とみなされることになります。

文字列を式やパラメーター、関数の引数に指定したつもりが、「"」記号で囲むことを忘れてしまうことがあります。もしその文字列が数字のみで構成されたもの( 12345 など)だったときは、Jasmine Tea はそれを数値として扱おうとしますので、このエラーが発生する原因となります。「"12345"」というように、「"」記号で囲って文字列としましょう。

数値を文字列として扱いたいときがあります。例えば、

year=2022
// "This year is 2022" としたい
title$="This year is "+year

というように、文字列と数値を連結させて1つの文字列としたいときなどです。このようなときは、数値を文字列に変換する str$ 関数を使うと良いでしょう。

year=2022
title$="This year is "+str$(year)

また、数字で構成された文字列( "47" など)を数値に変換する val 関数を使うことで、エラーとならずに数を計算する式で利用できるようになります。

year$="2022"
next_year=val(year$)+1

数値と文字列をそれぞれ変換する関数をうまく利用することで、エラーを発生させずに行いたいことができるようになります。

数が大きすぎるか、小さすぎます

発生する原因

  • 数値が-2147483648 よりも小さい
  • 数値が2147483647 よりも大きい

発生するプログラム例

// 数値が-2147483648 よりも小さい
answer=-2147483648-1
// 数値が2147483647 よりも大きい
p=46341*46341

発生しないようにする対策

数値として指定できる範囲は、下限と上限が決まっています。

下限:-2147483648まで

上限:2147483647まで

これを超える数値は使わないようにしてください。

0で割り算はできません

発生する原因

  • 0で割り算をしようとした

発生するプログラム例

// 割る数に0を使う
print 3/0
// 割る数に0が入る可能性のある変数を使う
let a=10-10
print 3/a
// 割る数に0が入る可能性のある配列を使う
a@=[4,3,2,1,0]
for i=0 to 4
  print 3/a@[i]
next

発生しないようにする対策

0で割り算をすることはできません。割る数に0を使わないようにしてください。

命令の呼び出し方が間違っています

発生する原因

  • 命令のパラメーターとして許可されない数値を指定した

発生するプログラム例

// 存在しない座標を指定した
circle (650,200),50,4
// 存在しない色番号を指定した
circle (100,200),50,100
// 存在しない方向を指定した
direction 0,50
// 存在しない速さを指定した
speed 0,50

発生しないようにする対策

命令のパラメーターに使う数値には、それぞれ指定可能な範囲があります。その範囲内で指定するようにしてください。パラメーターとして許可される数値の範囲は、各命令の辞書を参照してください。

関数の呼び出し方が間違っています

発生する原因

  • 関数の引数として許可されない数値を指定した

発生するプログラム例

// 存在しない文字コードを指定した
a$=chr$(1)
// bgmplayに0か1以外の数字を指定した
bgmplay 3
// randomの値の指定方法を間違えた
d=random(8,6)

発生しないようにする対策

関数の引数に使う数値には、それぞれ指定可能な範囲があります。その範囲内で指定するようにしてください。引数として許可される数値の範囲は、各関数の辞書を参照してください。

変数に値が代入されていません

発生する原因

  • 数値や文字列が一度も代入されていない変数を使用した
  • 配列を作成せずに配列変数を使用した

発生するプログラム例

print a
print b$
a@[0]=1

発生しないようにする対策

変数は、数値または文字列を何らか代入した後に、その値の取り出しが可能となります。また、配列は、配列リテラルを使って配列を作成して利用可能になります。変数や配列変数に対して、プログラム内で代入しているかどうかを確認してください。

配列の要素に値が代入されていません

発生する原因

  • 値が何も代入されていない配列の要素を利用しようとした

発生するプログラム例

a@=[0,1,2]
print a@[3]

発生しないようにする対策

配列に対して添字を指定して値を取り出そうとしたときに、一度も数値や文字列、配列が代入されていない要素の添字を指定した際には、このエラーとなります。プログラム内でその要素を利用する前に、何らかの値を代入するように修正してください。

添字が0以上の整数ではありません

発生する原因

  • 配列の添字として負の数や小数が指定された

発生するプログラム例

a@=[3,2,1,0]
print a@[0.5]
print a@[-1]

発生しないようにする対策

配列の添字として使用できるのは、0以上の整数のみです。0よりも小さい数や、小数が指定されていたときは、このエラーとなります。0以上の整数のみが指定されているか、添字の数値を確認してください。

数字や文字に対して添字が指定されました

発生する原因

  • 配列以外の値に対して [...] で添字が指定された

発生するプログラム例

a@=[1,2,3]
b=a@[1][2]

発生しないようにする対策

大括弧([...])を使って配列から値を取り出すことができますが、配列以外の値(数値や文字列)に対して式の中で [...] によって添字が指定されたときに、このエラーが発生します。上記の例では、a@[1] にて取り出された値が 2 となり、これは配列ではなく数値ですので、数値に対して [...] による添字指定がされたために、エラーとなります。

式の中で、添字を指定して値を取り出したい対象が配列かどうかを確認してください。

引数の数値が範囲外です

発生する原因

  • いくつかの関数にて許容されない値が引数に指定された

発生するプログラム例

print acos(2)
print left$("Jasmine Tea",-1)

発生しないようにする対策

acos, asin, chr$, left$, mid$, point, right$, scr$, sqr, tan 関数において、許容されない値が指定された際に発生するエラーです。各関数で引数に指定可能な数値の範囲を確認して、実行中に許容される値になるようにプログラムを修正してください。

書き方が間違っています

発生する原因

  • 命令のスペルを間違えている
  • 命令とパラメーターの組み合わせが正しくない
  • 関数と引数の組み合わせが正しくない
  • パラメーターや引数の書き方を間違えている
  • 変数の命名規則に沿っていない
  • 記号を間違えている

発生するプログラム例

// スペルを間違えている
circl (300,200),50,4,4
// パラメーターの個数が不足している
circle (300,200),50
// パラメーターの個数が多すぎる
circle (300,200),50,4,4,4
// 変数の命名規則に沿っていない
4a=5
a=6$
// 関数の引数が不足している
d=random(0,)
// 記号を間違えている
circle [300,200],50,4,4
// 記号を入れ忘れた
circle (300,200)50,4,4
// スペースを入れ忘れた
print1+2
// 全角の文字や記号・スペースを入れた
print 1+2

発生しないようにする対策

使いたい命令や関数によって、プログラムに書く必要のある情報や、その書き方は違います。その命令や関数に必要な情報とその書き方は、各命令・関数の辞書を参照してください。

また、記号の書き間違いはないか、スペースは適切に使用できているか、全角の文字や記号・スペースを使っていないかに気を付けるようにしましょう。

dataが足りません

発生する原因

  • read 命令の数より定義された data の数が少ない

発生するプログラム例

read x
read y
data 3

発生しないようにする対策

read 命令が実行される回数またはそれ以上の数値や文字列の個数を、data 命令によって提供してください。

使う目的ごとに data 命令を分割しておくことで、read 命令とdataの関係が明確になり、個数の把握もしやすくなります。

data hello,world
data 50,50,100,100,150,150,200,200,250,250

スプライトがありません

発生する原因

  • アニメーションを設定していないスプライト番号を指定した

発生するプログラム例

sprite 0,0,0
direction 1,5

発生しないようにする対策

アニメーションを各移動方向に割り当てることで、スプライトが作られます。スプライトにアニメーションを割り当てる方法は、以下の2種類があります。

  • スプライトダイアログにてアニメーションをスプライトに割り当てる
  • sprite 命令を使う

プログラムの中ではアニメーションが割り当てられたスプライト番号しか使えませんので、スプライト関連の命令を使う際には、間違ったスプライト番号を使用していないかどうか確認してください。

スプライト番号が範囲を超えています

発生する原因

  • スプライトを扱う命令や関数にて、範囲を超えたスプライト番号を指定した

発生するプログラム例

sprite 32,0
move -1

print xpos(32)
print ypos(50)

if crash(32,50) then
  // ...
end if

if touch(32,4) then
  // ...
end if

発生しないようにする対策

スプライト番号は 0 〜 31 までとなりますので、その範囲内でスプライト番号が指定されるように修正を行ってください。

PICパターンがありません

発生する原因

  • 定義されていないPICパターンの番号を指定した

発生するプログラム例

put (100,100),1000

発生しないようにする対策

プログラムの中では既に定義されたPICパターンの番号しか使えません。0~531までは、あらかじめpicパターンが定義されています。使いたいPICパターンの番号は、 定義済みPICパターンの一覧 を参照してください。

また、PICパターンは新たに定義することもできます。その場合は def pic 命令を使います。

PICパターンの番号を指定する際には、その番号が定義されているかどうか確認してください。

PICパターンに必要な数値の1次元配列ではありません

発生する原因

  • def pic 命令にて間違った大きさの配列が指定された

発生するプログラム例

c@=[1,2,3 … 257]
def pic 600,c@

c@=[[1,2,3 … 256]]
def pic 600,c@

発生しないようにする対策

def pic 命令で作成することができる PIC パターンに必要な色の数は、256 個(縦 16 x 横 16)です。つまり、def pic 命令の第2引数に指定する配列は、長さが 256 の数値の1次元配列となります。このエラーが発生したときは、def pic 命令に渡された配列の長さが 256 であることと、次元数が 1 であることを確認してください。配列の長さは len 関数で、配列の次元数は dimen 関数で得ることができます。

forがないのにnextがあります

発生する原因

  • for 命令によって繰り返しが開始されずに next 命令が実行された

発生するプログラム例

print i
next

発生しないようにする対策

next 命令は繰り返しの終了を意味し、繰り返しの始まりを意味する for 命令とセットで使われます。for next による繰り返しを使いたい場合には、プログラム中に必ず for 命令を入れるようにしましょう。

for i=0 to 4
  print i
next

forがないのにexit forがあります

発生する原因

  • for 命令によって繰り返しが開始されずに exit for 命令が実行された

発生するプログラム例

print i
exit for

発生しないようにする対策

exit for 命令は、for next による繰り返しから抜け出すための命令です。そのため、for 命令や next 命令なしでは使うことができません。exit for 命令は、for 命令と next 命令の間の行で使ってください。

for i=0 to 4
  print i
  exit for
next

nextがないのにexit forがあります

発生する原因

  • next 命令によって繰り返しの終わりを示さないまま exit for 命令が実行された

発生するプログラム例

for i=0 to 4
  exit for

発生しないようにする対策

exit for 命令は、for next による繰り返しから抜け出すための命令です。そのため、for 命令や next 命令なしでは使うことができません。exit for 命令は、for 命令と next 命令の間の行で使ってください。

for i=0 to 4
  print i
  exit for
next

doがないのにloopがあります

発生する原因

  • do 命令によって繰り返しが開始されずに loop 命令が実行された

発生するプログラム例

print i
loop

発生しないようにする対策

loop 命令を使って繰り返しをしたい場合は、do 命令で繰り返しの先頭を指定します。loopは繰り返しの終わりを意味します。loop 命令の前に do 命令が実行されているかを確認してください。

do
  print i
loop

doがないのにexit doがあります

発生する原因

  • do 命令によって繰り返しが開始されずに exit do 命令が実行された

発生するプログラム例

print i
exit do

発生しないようにする対策

exit do 命令は、do loop による繰り返しから抜け出すための命令です。そのため、do 命令や loop 命令なしでは使うことができません。exit do 命令は、do 命令と loop 命令の間の行で使ってください。

do
  print i
  exit do
loop

loopがないのにexit doがあります

発生する原因

  • loop 命令によって繰り返しの終わりを示さないまま exit do 命令が実行された

発生するプログラム例

do
  print i
  exit do

発生しないようにする対策

exit do 命令は、do loop による繰り返しから抜け出すための命令です。そのため、do 命令や loop 命令なしでは使うことができません。exit do 命令は、do 命令と loop 命令の間の行で使ってください。

do
  print i
  exit do
loop

アニメーションがありません

発生する原因

  • 定義されていないアニメーションの番号を指定した

発生するプログラム例

sprite 0,1,76

発生しないようにする対策

プログラムの中では既に定義されたアニメーションの番号しか使えません。0~75 までは、あらかじめアニメーションが定義されています。定義済みのアニメーションはスプライトダイアログから確認できます。

アニメーションは新たに定義することもできます。スプライトダイアログの中のアニメーションの作成ボタンから、新たなアニメーションを定義できます。また、def animation 命令を使うことで、プログラムの実行時に新しいアニメーションを定義することもできます。

sprite 命令にてアニメーションの番号を指定する際には、その番号が定義されているかどうか確認してください。

背景がありません

発生する原因

  • 定義されていない背景の番号を指定した

発生するプログラム例

background 10

発生しないようにする対策

プログラムの中では既に定義された背景の番号しか使えません。0~3までは、あらかじめ背景が定義されています。定義済みの背景は背景ダイアログにて確認できます。

背景は背景ダイアログを使って新たに定義することもできます。また、def background 命令を使うことで、プログラムの実行中に新しい背景を定義することもできます。

background 命令にて背景の番号を指定する際には、その番号が定義されているかどうか確認してください。

背景に必要な数値の1次元配列ではありません

発生する原因

  • def pic 命令にて間違った大きさの配列が指定された

発生するプログラム例

p@=[1,2,3 … 1001]
def background 0,p@,-1

p@=[[1,2,3 … 1000]]
def background 0,p@,-1

発生しないようにする対策

def background 命令で作成することができる背景に必要な PIC パターンの ID の数は 1000 個(縦 40 x 横 25)です。つまり、def background 命令の第2引数に指定する配列は、長さが 1000 の数値の1次元配列となります。このエラーが発生したときは、def background 命令に渡された配列の長さが 1000 であることと、次元数が 1 であることを確認してください。配列の長さは len 関数で、配列の次元数は dimen 関数で得ることができます。

声が使えません

発生する原因

  • Jasmine Teaにマイクの使用を許可しなかった

発生しないようにする対策

プログラム中に listen 命令を使うと、ブラウザーからマイクの使用を許可するかどうか尋ねるポップアップが表示されます。

errors-1

このとき、マイクの使用を許可しないと、エラーが発生します。listen 命令を使うときは、マイクの使用を許可してください。

間違ってブロックを押してしまった場合は、ブラウザーから設定を変える必要があります。使っているブラウザーによって設定の方法が異なるので、「(ブラウザ名) マイク 許可」などのワードで検索し、ブラウザーの公式ヘルプに従って、Jasmine Teaのサイトでマイクが使用できるよう設定してください。

命令の呼び出し回数が多すぎます

発生する原因

  • call 命令によるプロシージャの再帰呼び出しの回数が 1000 回以上行われた

発生するプログラム例

call countup 1

procedure countup x
  print x
  call countup x + 1
end procedure

発生しないようにする対策

再帰呼び出しとは、プロシージャの中で更に call 命令を使ってプロシージャを呼び出すことです。例えば、countup というプロシージャの中で、call 命令を使って同じ countup プロシージャを呼び出すことを再帰呼び出しと呼びます。

再帰呼び出しでは、ある条件によってプロシージャを呼び出さないようにしないと、永遠に call 命令呼び出しの連鎖が続いてしまいます。Jasmine Teaでは、再帰呼び出しの回数は 999 回までと決められているので、それを超えるとエラーが出ます。

エラーを発生させないために、999 回以内にその再帰呼び出しが終わるように条件分岐を行ってください。

call countup 1

procedure countup x
  if x > 100 then
    exit procedure
  end if
  print x
  call countup x + 1
end procedure

命令が見つかりません

発生する原因

  • call 命令のパラメータとして定義されていないプロシージャの名前が書かれた

発生するプログラム例

call count 1

procedure countup x
  print x
end procedure

発生しないようにする対策

call 命令を使って呼び出せるのは、既に定義してあるプロシージャだけです。プログラム中でそのプロシージャが期待した名前で定義されているか確認してください。

同じ名前の命令があります

発生する原因

  • 同じ名前のプロシージャを複数定義した

発生するプログラム例

procedure log message$
  print message$
end procedure
procedure log message$,value
  print message$;value
end procedure

発生しないようにする対策

同じ名前のプロシージャは作らないようにしてください。

end procedureがないのにprocedureがあります

発生する原因

  • end procedure 命令によって定義の終わりを示さないまま 、次のprocedure 命令が実行された

発生するプログラム例

procedure log message$
  print message$
procedure countup x

発生しないようにする対策

プロシージャを定義する procedure 命令は、プロシージャの終わりを指示する end procedure 命令とセットで使われます。プロシージャを定義したい場合には、procedure 命令を定義の最初に、 end procedure 命令を定義の最後に入れるようにしましょう。

また、procedureの定義の途中で、新たにprocedureを定義することはできません。つまり、procedureの定義を入れ子構造にすることはできません。プロシージャの中でプロシージャを使いたいときには、使いたいプロシージャを別に定義してから、call命令で呼び出してください。

procedure log message$
  print message$
end procedure

procedure countup ref x
  x=x+1
end procedure

定義したプロシージャごとにまとまって見えるよう、適切に空行やインデントを入れると、procedure 命令と end procedure 命令の組がわかりやすくなります。

procedure がないのに end procedure があります

発生する原因

  • procedure 命令によってプロシージャが定義されないまま end procedure 命令が実行された

発生するプログラム例

  print x
end procedure

発生しないようにする対策

プロシージャの終わりを指示する end procedure 命令は、プロシージャの定義をする procedure 命令とセットで使われます。プロシージャを定義したい場合には、プログラム中に必ず procedure 命令と end procedure 命令の両方を入れるようにしましょう。

procedure log x
  print x
end procedure

同じ名前の変数があります

発生する原因

  • procedure 命令を使ってプロシージャを定義した際に、同じ名前の引数が複数書かれていた

発生するプログラム例

procedure log msg,msg

発生しないようにする対策

procedure 命令を使ってプロシージャを定義する際に、複数の引数を書くことができます。この際に、引数の名前が重複していないかどうか、確認を行ってください。

プロシージャの呼び出し回数が多すぎます

発生する原因

  • プロシージャの再帰呼び出しの回数が 1000 回以上行われた

発生するプログラム例

procedure plus_2 value
  value=value+2
  print value
  call plus_2 value
end procedure

call plus_2 1

発生しないようにする対策

再帰呼び出しとは、プロシージャの中で更にプロシージャを呼び出すことです。上記のプログラム例では、plus_2 というプロシージャの中で、同じ plus_2 プロシージャを呼び出しています。

再帰呼び出しでは、ある条件によってプロシージャを呼び出さないようにしないと、永遠にプロシージャ呼び出しの連鎖が続いてしまいます。Jasmine Teaでは、再帰呼び出しの回数は 999 回までと決められているので、それを超えるとエラーが出ます。

エラーを発生させないために、999 回以内にその再帰呼び出しが終わるように条件分岐を行ってください。

プロシージャが見つかりません

発生する原因

  • call 命令を使って呼び出そうとしたプロシージャがプログラムの中で作成されていない

発生するプログラム例

procedure log msg
  print msg
end procedure

call log_output "Hello"

発生しないようにする対策

プロシージャを call 命令にて呼び出せるのは、procedure 命令を使って既に定義してあるプロシージャだけです。プログラム中でそのプロシージャが期待した名前で定義されているか確認してください。

同じ名前のプロシージャがあります

発生する原因

  • 同じ名前のプロシージャを複数定義しようとした

発生するプログラム例

procedure log msg
  print msg
end procedure
procedure log msg
  print msg
end procedure

発生しないようにする対策

同じ名前のプロシージャは作らないようにしてください。

プロシージャの引数の個数が間違っています

発生する原因

  • call 命令を使って呼び出そうとしたプロシージャに渡す値の個数が procedure 命令での定義と異なっている

発生するプログラム例

procedure log msg
  print msg
end procedure

call log "Hello", "world"

発生しないようにする対策

procedure 命令にて定義されたプロシージャの引数の個数と、call 命令でそのプロシージャを呼び出そうとしているときに渡している値の個数が一致しているかどうかを確認してください。

関数の呼び出し回数が多すぎます

発生する原因

  • 関数の再帰呼び出しの回数が 1000 回以上行われた

発生するプログラム例

f=fractal(10)
print f

function fractal(x)
  if x=1 then
    return 1
  else
    return x*fractal(x)
  end if
end function

発生しないようにする対策

再帰呼び出しとは、関数の中で更に関数を呼び出すことです。上記のプログラム例では、fractal という関数の中で、同じ fractal 関数を呼び出しています。

再帰呼び出しでは、ある条件によって関数を呼び出さないようにしないと、永遠に関数呼び出しの連鎖が続いてしまいます。Jasmine Teaでは、再帰呼び出しの回数は 999 回までと決められているので、それを超えるとエラーが出ます。

エラーを発生させないために、999 回以内にその再帰呼び出しが終わるように条件分岐を行ってください。

f=fractal(10)
print f

function fractal(x)
  if x=1 then
    return 1
  else
    // xの数値を減らして再帰呼び出しする
    return x*fractal(x-1)
  end if
end function

関数が見つかりません

発生する原因

  • 式の中で呼び出そうとした独自関数がプログラムの中で作成されていない

発生するプログラム例

f=fructal(10)
print f

function fractal(x)
  if x=1 then
    return 1
  else
    return x*fractal(x)
  end if
end function

発生しないようにする対策

独自関数を式の中で呼び出せるのは、function 命令を使って既に定義してある独自関数だけです。プログラム中でその独自関数が期待した名前で定義されているか確認してください。

同じ名前の関数があります

発生する原因

  • 同じ名前の独自関数を複数定義しようとした

発生するプログラム例

function add(a,b)
  return a+b
end function
function add(a,b,c)
  return a+b+c
end function

発生しないようにする対策

同じ名前の独自関数は作らないようにしてください。

関数の引数の個数が間違っています

発生する原因

  • 関数に渡すべき引数の個数が異なっている。

発生するプログラム例

a=abs(1,2)

s=sum(1)
function sum(a,b)
  return a+b
end function

発生しないようにする対策

Jasmine Tea が提供している各種関数および function 命令で作成可能な独自関数では、それぞれ受け取ることができる引数の個数が決まっています。関数を呼び出す際に、対象の関数が期待する引数の個数を確認してください。

end functionがないのにfunctionがあります

発生する原因

  • end function 命令によって定義の終わりを示さないまま 、次の function 命令が実行された

発生するプログラム例

function add(a,b)
  return a+b

function sub(a,b)
  return a-b
end function

発生しないようにする対策

独自関数を定義する function 命令は、独自関数の終わりを指示する end function 命令とセットで使われます。独自関数を定義したい場合には、function 命令を定義の最初に、 end function 命令を定義の最後に入れるようにしましょう。

function add(a,b)
  return a+b
end function

function sub(a,b)
  return a-b
end function

定義した独自関数ごとにまとまって見えるよう、適切に空行やインデントを入れると、function 命令と end function 命令の組がわかりやすくなります。

functionがないのにreturnがあります

発生する原因

  • 独自関数の定義外で return 命令が実行された

発生するプログラム例

c=add(1,2)
return c

function add(a,b)
  return a+b
end function

発生しないようにする対策

return 命令は、function 命令と end function 命令の組み合わせで定義される独自関数の戻り値を決定する役割があります。そのため、return 命令は独自関数の定義内でのみ実行することができます。

return 命令が funciton 命令と end function 命令との間の行で実行されているかどうかを確認してください。

returnが呼ばれずにend functionに到達しました

発生する原因

  • 一度も return 命令が実行されずに、end function 命令が実行された

発生するプログラム例

x=2
if is_odd(x) then
  print x;" is odd"
else
  print x;" is even" 
end if

function is_odd(x)
  if x%2=1 then
    return -1
  end if
end function

発生しないようにする対策

独自関数は、return 命令を実行することで、必ず戻り値を決定しなければなりません。もし1度も return 命令が実行されずに end function 命令が実行されたときは、このエラーが発生します。

上記のプログラム例では、is_odd 独自関数に偶数が渡されたときは、2 で割ったあまりが 0 となるため、return 命令が実行されずに end function 命令の行まで到達してしまいます。以下のように、偶数が渡されたときの処理を追加することで、必ず return 命令が実行されるようにします。

x=2
if is_odd(x) then
  print x;" is odd"
else
  print x;" is even" 
end if

function is_odd(x)
  if x%2=1 then
    return -1
  else
    return 0
  end if
end function

end procedureがないのにfunctionがあります

発生する原因

  • プロシージャ定義の中で function 命令が実行された

発生するプログラム例

procedure log msg$,ms
  print "[INFO-";to_s(ms);"]";msg$
function to_s(ms)
  return ms/1000
end function
end procedure

発生しないようにする対策

procedure 命令と end procedure 命令で作られるプロシージャの中で、function 命令を使うことはできません。function 命令と end function 命令で作られる独自関数は、プロシージャとは独立して定義してください。

procedure log msg$,ms
  print "[INFO-";to_s(ms);"]";msg$
end procedure

function to_s(ms)
  return ms/1000
end function

end functionがないのにprocedureがあります

発生する原因

  • 独自関数定義の中で procedure 命令が実行された

発生するプログラム例

s=to_s(1000)

function to_s(ms)
  call log str$(ms)
  return ms/1000
procedure log msg$
  print "[INFO]";msg$
end procedure
end function

発生しないようにする対策

function 命令と end function 命令で作られる独自関数の中で、procedure 命令を使うことはできません。procedure 命令と end procedure 命令で作られるプロシージャは、独自関数とは独立して定義してください。

s=to_s(1000)

function to_s(ms)
  call log str$(ms)
  return ms/1000
end function

procedure log msg$
  print "[INFO]";msg$
end procedure

文字列の長さを超えています

発生する原因

  • left$, mid$, right$ 関数で取り出そうとした文字列の長さが、元の文字列の長さを超えている。

発生するプログラム例

let l=left$("abcd",5)
let m=mid$("abcd",2,3)
let r=right$("abcd",5)

発生しないようにする対策

left$, mid$, right$ 関数は、それぞれ元の文字列から取り出したい部分文字列の個数を指定します。その個数が元の文字列の範囲から超えてしまった際に、このエラーが発生します。予め len 関数を使って元の文字列の長さを得るなどして、これらの関数に指定する個数が元の文字列の範囲内に収まるようにしてください。

色の番号が範囲外です

発生する原因

  • 色を指定する番号が 0〜37 の範囲を超えている。

発生するプログラム例

c@=[]
c@[0]=38
def pic 600,c@

発生しないようにする対策

Jasmine Tea にて使用することができる色は、0〜37 の 38 色となります。また、命令によっては、透明色を意味する -1 を使用することもできます。この色番号の範囲外の数値が指定された際に、このエラーは発生します。指定された色番号が 0〜37 もしくは -1〜37 の範囲内かどうかを確認してください。

同じ名前の変数があります

発生する原因

  • プロシージャまたは独自関数にて同じ名前の引数が複数存在している

発生するプログラム例

procedure log msg,Msg
  print msg
end procedure

function sum(a,A)
  return a+a
end function

発生しないようにする対策

procedure 命令でプロシージャを作成するとき、または function 命令で独自関数を作成するときに、同じ名前の引数が複数存在すると、このエラーが発生します。特に Jasmine Tea では、引数名などは大文字と小文字を区別しませんので、同名の引数がないかどうかを確認してください。

同じ名前の変数があります

発生する原因

  • プロシージャまたは独自関数にて同じ名前の引数が複数存在している

発生するプログラム例

procedure log msg,Msg
  print msg
end procedure

function sum(a,A)
  return a+a
end function

発生しないようにする対策

procedure 命令でプロシージャを作成するとき、または function 命令で独自関数を作成するときに、同じ名前の引数が複数存在すると、このエラーが発生します。特に Jasmine Tea では、引数名などは大文字と小文字を区別しませんので、同名の引数がないかどうかを確認してください。

nextの位置が不正です

発生する原因

  • for 命令がないのに next 命令を使おうとした

発生するプログラム例

for i=0 to 5
  print i
next
next

発生しないようにする対策

next 命令と対になる for 命令が見つからないときにこのエラーが発生します。for 命令と next 命令の個数が一致するかどうか確認をしてください。

ifがないのにelse ifがあります

発生する原因

  • if 命令で条件分岐を開始せずに else if 命令を使った

発生するプログラム例

else if a%5 then
  print "Buzz"
else
  print a
end if

発生しないようにする対策

else if 命令は、その前に if 命令での条件分岐が必要となりますので、if 命令があるかどうかを確認してください。

ifがないのにelseがあります

発生する原因

  • if 命令で条件分岐を開始せずに else 命令を使った

発生するプログラム例

else
  print a
end if

発生しないようにする対策

else 命令は、その前に if 命令での条件分岐が必要となりますので、if 命令があるかどうかを確認してください。

ifがないのにend ifがあります

発生する原因

  • if 命令で条件分岐を開始せずに end if 命令を使った

発生するプログラム例

print a
end if

発生しないようにする対策

end if 命令は、その前に if 命令での条件分岐の開始が必要となりますので、if 命令があるかどうかを確認してください。

procedureの位置が不正です

発生する原因

  • 繰り返しや条件分岐の中でprocedure命令が使われた

発生するプログラム例

for i=0 to 5
  procedure log msg
    print msg
  end procedure
  call log i
next

発生しないようにする対策

繰り返し(for-next, do-loop)や条件分岐(if-else-end if)の中で procedure 命令を使うことはできません。それらに procedure 命令が含まれているかどうかを確認してください。

functionの位置が不正です

発生する原因

  • 繰り返しや条件分岐の中でfunction命令が使われた

発生するプログラム例

for i=0 to 5
  function double(v)
    return v*2
  end function
  print double(i)
next

発生しないようにする対策

繰り返し(for-next, do-loop)や条件分岐(if-else-end if)の中で function 命令を使うことはできません。それらに function 命令が含まれているかどうかを確認してください。

end ifがないのにifがあります

発生する原因

  • if 命令で条件分岐が開始されたまま、プログラムの最終行まで到達した

発生するプログラム例

a=4
if a%5=0 then
  print "Fizz"
else if a%3=0 then
  print "Buzz"
else
  print i

発生しないようにする対策

if 命令によって条件分岐が開始されたあとは、end if 命令を使って必ず条件分岐を終了させてください。

nextがないのにforがあります

発生する原因

  • for 命令で繰り返しが開始されたまま、プログラムの最終行まで到達した

発生するプログラム例

for i=0 to 5
  print i

発生しないようにする対策

for 命令によって繰り返しが開始されたあとは、next 命令を使って必ず繰り返し処理の終わりを決定してください。

loopがないのにdoがあります

発生する原因

  • do 命令で繰り返しが開始されたまま、プログラムの最終行まで到達した

発生するプログラム例

do
  a=a+1

発生しないようにする対策

do 命令によって繰り返しが開始されたあとは、loop 命令を使って必ず繰り返し処理の終わりを決定してください。

アカウント登録後に使用することができる機能です

発生する原因

  • アカウント登録が必要な機能をアカウント登録なしに実行した

発生しないようにする対策

アカウント登録をした後に、再度実行してください。

ポート番号が範囲を超えています(1-65535)

発生する原因

  • 指定可能な範囲外のポート番号を指定した

発生するプログラム例

conn_id$=bind$(0)

発生しないようにする対策

範囲内のポート番号を指定してください。指定可能なポート番号は 1 から 65535 までの整数です。

接続を受け付けていません

発生する原因

  • 接続を受け付けていないポート番号を指定して unbind 命令を実行した

発生するプログラム例

unbind 8080

発生しないようにする対策

まずは bind 関数を使用して、接続を受け付ける必要があります。接続の受け付けを開始した後でも、なんらかの原因で接続が終了するケースもありますので、下記のように受け付け中の場合のみ unbind 命令を実行するようにしてください。

conn_id$=bind$(8080)
if binding(8080) then
  unbind 8080
end if

Bindに失敗しました

発生する原因

  • 既に接続受付中のポート番号を指定して bind を実行した
  • 指定したポート番号が他の接続によって使用されていた

発生するプログラム例

rem 既に接続受付中のポート番号を指定して bind を実行した
conn_id$=bind$(8080)
conn_id2$=bind$(8080)
rem 指定したポート番号が他の接続によって使用されていた
server_conn_id$="xxxxxxxxxxxxxxxx"
client_conn_id$=connect$(server_conn_id$)

rem ポート番号 1 がクライアント接続で使用されてしまっている
self_server_conn_id$=bind(1)

発生しないようにする対策

  • 複数のサーバーを開始する場合には、ポート番号を変更してください
  • bind に使用するポート番号は、ある程度大きな数字を使用してください(目安としては 10 以上)