スクリプトの仕様メモ
投稿者: cfm_ 投稿日:2016/07/15 19:11
≪小数の切り上げ
|
defの多重使用について≫
完全に自分用。
例示されているスクリプトは、全て実行して確かめました。
注:明記のない検証では、null値・NaN値・Infinity値を考慮していません。
ツイート
例示されているスクリプトは、全て実行して確かめました。
注:明記のない検証では、null値・NaN値・Infinity値を考慮していません。
#変数に、配列の入った別の変数を代入すると、配列への参照がコピーされる a=createArray() a[1]=20 b=a b[1]=30 speak(a[1]) #30 speak(b[1]) #30 #配列の入った変数に代入すると、変数だけ上書きされ、入っていた配列には影響がない a=createArray() a[2]=20 b=a a=createArray() speak(a[2]) #null speak(b[2]) #20 #配列の要素も、変数と同じようにふるまう a=createArray() a[1]=createArray() a[1][2]=20 b=a[1] a[1]=createArray() speak(a[1][2]) #null speak(b[2]) #20 #数値と文字列は、値が同じなら等しい(片方が文字列のとき、もう片方が文字列に変換される?) speak("1"==1) #true speak("10"==10) #true speak(10/0=="Infinity") #true #足し算は、どちらかが文字列なら結合される speak("10"+10) #1010 speak("10"+10==1010) #true #文字列と数値の、足し算以外の演算はエラー、ただし例外あり speak("10"-10) #エラー speak(("10")-3) #7 speak("10"+10-3) #1007 speak(10+"10"-3) #エラー speak(10-3+"10") #エラー #配列の参照先が等しいかの判別が可能 a=createArray() b=a speak(a==b) #true a=createArray() b=createArray() speak(a==b) #false #配列の大小は存在しない a=createArray() b=createArray() speak(a>b) #false speak(a<b) #false #定義されていない変数は、変数名の文字列と等しい(not defined variableと表示される) speak(aa) #aa speak(toString(aa)) #aa speak(aa=="aa") #true #したがって、"null"や別の非定義変数とは等しくない(not defined variableと表示される) speak(aa=="null") #false speak(aa==null) #false #省略された引数の変数は、"null"と等しくないが、文字列に変換すると"null"になる(エラー無し) def a(b) speak(b) #null speak(b=="null") #false speak(toString(b)=="null") #true end a() # &&は、左辺が(A)を満たすときfalseを返し、満たさないとき右辺を返す #(A)false or null or "" or 0 speak(false&&true) #false speak(""&&"ok") #false speak("ああ"&&"ok") #ok speak("false"&&"ok") #ok speak(0&&"ok") #false speak(10&&"ok") #ok speak(-10&&"ok") #ok # ||は、左辺が(A)を満たすとき右辺を返し、満たさないときtrueを返す #(A)false or null or "" or 0 speak(false||true) #true speak(""||"ok!") #ok! speak("ああ"||"ok!") #true speak("false"||"ok!") #true speak(0||"ok!") #ok! speak(10||"ok!") #true speak(-10||"ok!") #true #whileは、条件が(A)以外のとき #(A)false or null or "" or 0 while 0 do speak("ok");end #実行されない while -1 do speak("ok");end #実行される while 1 do speak("ok");end #実行される while "" do speak("ok");end #実行されない while "あ" do speak("ok");end #実行される #ifは、(B)以外のときtrue #(B)false or null or "" if 0 then speak("1");end #1 if 1 then speak("2");end #2 if -1 then speak("3");end #3 if 10 then speak("4");end #4 if -10 then speak("5");end #5 if "" then speak("6");end if "aa" then speak("7");end #7 if "true" then speak("8");end #8 if "false" then speak("9");end #9 #!は(B)以外をtrueとみなす #(B)false or null or "" speak(!0) #false speak(!1) #false speak(!-1) #false speak(!10) #false speak(!-10) #false speak(!"") #true speak(!"aa") #false speak(!"true") #false speak(!"false") #false #http://rmake.jp/boards/2/topics/1052 でのfragileさんの投稿 a = 0 if 0 #true ifに0だからtrue if a #true if 0||a #true ifに0だからtrue if a||0 #true if 0 && a #false ifにfalseだからfalse if a && 0 #false if !0 #false !0=false if !a #false if !0||a #true !0=falseだから、if a、すなわちif 0となり、true if 0||!a #false if !a となるから、if !0となり、false if !0||!a #false if false||falseとなるから、false if !a||0 #true if false||0となるから、if 0であり、true if a||!0 #false もう疲れた…… if !a||!0 #false if !0&&a #false if 0&&!a #false if !0&&!a #false if !a&&0 #false if a&&!0 #false if !a&&!0 #false 16/07/17.追加。上の説明も少し変更。 def a(b) #null(空引数)はfalseではない speak(b==false) #false #(A)はnullもfalseとして扱う speak(b&&"ok") #false #(B)はnullもfalseとして扱う speak(!b==true) #true end a() #trueは1,"1"とのみ等しい speak("1"==true) #true speak(1==true) #true speak("0"==true) #false speak("-1"==true) #false speak("-10"==true) #false speak("10"==true) #false speak(0==true) #false speak(-1==true) #false speak(-10==true) #false speak(10==true) #false speak(""==true) #false speak("aa"==true) #false speak("true"==true) #false #falseは0,"0",""とのみ等しい speak("0"==false) #true speak(0==false) #true speak(""==false) #true speak("1"==false) #false speak(1==false) #false speak("-1"==false) #false speak("-10"==false) #false speak("10"==false) #false speak(-1==false) #false speak(-10==false) #false speak(10==false) #false speak("aa"==false) #false speak("true"==false) #false def a(b) #nullは文字列,数値とは等しくない speak("1"==b) #false speak(1==b) #false speak("0"==b) #false speak("-1"==b) #false speak("-10"==b) #false speak("10"==b) #false speak(0==b) #false speak(-1==b) #false speak(-10==b) #false speak(10==b) #false speak(""==b) #false speak("aa"==b) #false speak("true"==b) #false end a() #上3つ(true,false,null)の==を!=に置き換えると、全て結果が反転 #(スクリプト省略) #null値同士は等しい def a(b,c) speak(b==c) #true speak(b!=c) #false end a() //16.07.19.追加 #defより前に関数を呼び出すとエラー #エラー a() def a() speak("a") end #スクリプトの流れで、先にdefを通ればよいという訳ではない。 #エラー i=false while true if i b() end def b() speak("b") end i=true end #ifでdefを実行させないとエラー #Error #1069;null if false def a() speak("a") end end a() #ifでdefを実行させると関数を呼び出せる if true def a() speak("a") #"a" end end a() #defを重ねると、内側のdefは実行されない def a() speak("a") #"a" def b() speak("b") end end a() #二重defも普通に使える。 def a() speak("a") #"a" def b() speak("b") #"b" end b() end a() #defより前では使えない #エラー def a() speak("a") b() def b() speak("b") end end a() #defの内側の関数は外から呼び出せない #Error #1069;null def a() speak("a") def b() speak("b") end end b() #関数でreturnしなかったとき、返り値はnull def a() end speak(a()=="null") #false speak(toString(a())=="null") #true #setVariableは関数名を返す speak(setVariable("test",2)) #test #0で割るとInfinity値、0で剰余を求めるとNaN speak(10/0) #Infinity speak(10%0) #NaN #計算で、""は0として扱い、""以外の文字を使うとNaNとなる(エラーなし) #ただし、引き算で左が文字のとき、文法エラー speak(10/"") #Infinity speak(10/"aa") #NaN speak(""/10) #0 speak("aa"*10) #NaN speak(10*"") #0 speak(10*"aa") NaN speak(""*10) #0 speak("aa"*10) #NaN speak(10-"") #10 speak(10-"aa") #NaN speak(""-10) #文法エラー speak("aa"-10) #文法エラー speak(10%"") #NaN speak(10%"aa") #NaN speak(""%10) #0 speak("aa"%10) #NaN #ただし、引き算で左が文字でも、計算結果や変数の値なら文法エラーなし a="" b="aa" speak(a-10) #-10 speak(b-10) #NaN speak(10-a) #10 speak(10-b) #NaN 16.08.01.追加 popArray()は正しく使わないとエラーを起こしそう。 #getArrayLengthは最大の要素の番号+1を返す a=createArray() a[0]="a" a[1]="b" a[10]="c" speak(getArrayLength(a)) #11 #pushArrayは最後の要素の次に要素を追加する a=createArray() a[0]="a" a[1]="b" a[10]="c" pushArray(a,"d") speak(a[2]) #null speak(a[11]) #"d" #popArrayは最後の要素を取り出して配列の長さを-1する a=createArray() a[0]="a" a[1]="b" a[10]="c" speak(popArray(a)) #c speak(getArrayLength(a))#10 speak(popArray(a)) #null 16.08.25.追加 #startInput(),takeInput,setCanvasVisibleの返り値はnull speak(startInput()) #null speak(setCanvasVisible(true)) #null startInput() while true while hasInput() speak("takeinput="+takeInput()) #null end waitTime(1) end #takeInputで取得した入力は何度でも判定できる #結果:[A]を押すと、A1,A2が順に表示される。 [alt](対応していないキーなら何でも良い)を押すとB1,B2が順に表示される。 startInput() while true while hasInput() takeInput() if isKeyDown("A") speak("A1") end if isKeyDown("") speak("B1") end if isKeyDown("A") speak("A2") end if isKeyDown("") speak("B2") end end waitTime(1) end #getMousePositionは、入力がMouseDown/MouseUp/MouseMoveのどれかのときのみ使用可能 #test0 speak(getMousePosition()[0])#エラー startInput() #test1 speak(getMousePosition()[0])#エラー while true while hasInput() takeInput() #test2 if !isMouseMove() speak(getMousePosition()[0]) #クリックでは表示される,キーを押すとエラー end #test3 if isKeyDown("A") speak(getMousePosition()[0]) #エラー end #test4 if isKeyDown("B") if !isMouseMove() speak(getMousePosition()[0]) #エラー end end end end #createSpriteは1~512の中で、空いている一番小さい番号を返す speak(createSprite(298715))#1 speak(createSprite(298715))#2 speak(createSprite(298715))#3 speak(createSprite(298715))#4 speak(createSprite(298715))#5 speak(createSprite(298715))#6 deleteSprite(2) deleteSprite(3) deleteSprite(5) speak(createSprite(298715))#2 speak(createSprite(298715))#3 speak(createSprite(298715))#5 16.09.25.追加 エスケープシーケンスについて #\nで改行 #\tでタブ文字 #それ以外の小文字・大文字アルファベットでは何も起こらないことを確認した。 #\"でダブルクオーテーション #\\でバックスラッシュ(円マーク) #\nと\tは1文字 speak(getArrayLength(splitString("\n","")))#1 speak(getArrayLength(splitString("\t","")))#1 16.09.26.追加 #(A)(B)ともにInfinityはtrue、NaNはfalse speak(!(1/0))#false speak((1/0)&&"a")#a speak((1/0)||"a")#true if (1/0) then speak("a") ;end#a while (1/0)#ずっとb speak("b") end speak(!toNumber("a"))#true speak(toNumber("a")&&"a")#false speak(toNumber("a")||"a")#a if toNumber("a") then speak("a") ;end#表示なし while toNumber("a")#表示なし speak("b") end 16.11.10.追加 #InfinityはInfinityとのみ等しい #NaNは何と比較してもfalseを返す((NaN==NaN)はfalse) inf=10/0 null=getVariable("a") nan=toNumber("a") #特殊な掛け算(Infinity) #負の値を掛けると-Infinity speak(inf*(-10)) #-Infinity speak((-10)*inf) #-Infinity speak((-1)*inf) #-Infinity speak(inf*(-1)) #-Infinity #正の値を掛けるとInfinity speak(1*inf) #Infinity speak(inf*1) #Infinity speak(inf*10) #Infinity speak(10*inf) #Infinity #Infinity,trueを掛けるとInfinity speak(inf*inf) #Infinity speak(inf*true) #Infinity speak(true*inf) #Infinity #0,null,NaN,false,文字列を掛けるとNaN speak(0*inf) #NaN speak(inf*0) #NaN speak(inf*null) #NaN speak(null*inf) #NaN speak(inf*nan) #NaN speak(nan*inf) #NaN speak(inf*"") #NaN speak(""*inf) #NaN speak(inf*"a") #NaN speak("a"*inf) #NaN speak(inf*false) #NaN speak(false*inf) #NaN #特殊な掛け算(null) #Infinity,NaN,""でない文字列を掛けるとNaN speak(null*inf) #NaN speak(null*nan) #NaN speak(null*"a") #NaN #数値,"",null,true,falseを掛けると0 speak(null*(-10)) #0 speak(null*(-1)) #0 speak(null*0) #0 speak(null*1) #0 speak(null*10) #0 speak(null*"") #0 speak(null*null) #0 speak(null*true) #0 speak(null*false) #0 #特殊な掛け算(NaN) #何を掛けてもNaN speak(nan*(-10)) #NaN speak(nan*(-1)) #NaN speak(nan*0) #NaN speak(nan*1) #NaN speak(nan*10) #NaN speak(nan*inf) #NaN speak(nan*null) #NaN speak(nan*nan) #NaN speak(nan*"") #NaN speak(nan*"a") #NaN speak(nan*true) #NaN speak(nan*false) #NaN #特殊な割り算 speak("A1") speak(inf/(-10)) #-Infinity speak(inf/(-1)) #-Infinity speak(inf/0) #Infinity speak(inf/1) #Infinity speak(inf/10) #Infinity speak(inf/null) #Infinity speak(inf/"") #Infinity speak(inf/true) #Infinity speak(inf/false) #Infinity speak(inf/inf) #NaN speak(inf/nan) #NaN speak(inf/"a") #NaN speak("A2") speak((-10)/inf) #0 speak((-1)/inf) #0 speak(0/inf) #0 speak(1/inf) #0 speak(10/inf) #0 speak(inf) #Infinity speak(""/inf) #0 speak(true/inf) #0 speak(false/inf) #0 speak(inf/inf) #NaN speak(inf) #Infinity speak("a"/inf) #NaN speak("B1") speak(null/(-10)) #0 speak(null/(-1)) #0 speak(null/0) #NaN speak(null/1) #0 speak(null/10) #0 speak(null/null) #NaN speak(null/"") #NaN speak(null/true) #0 speak(null/false) #NaN speak(null/inf) #0 speak(null/nan) #NaN speak(null/"a") #NaN speak("B2") speak((-10)/null) #-Infinity speak((-1)/null) #-Infinity speak(0/null) #NaN speak(1/null) #Infinity speak(10/null) #Infinity speak(null/null) #NaN speak(""/null) #NaN speak(true/null) #Infinity speak(false/null) #NaN speak(inf/null) #Infinity speak(null) #null speak("a"/null) #NaN speak("C1") speak(nan/(-10)) #NaN speak(nan/(-1)) #NaN speak(nan/0) #NaN speak(nan/1) #NaN speak(nan/10) #NaN speak(nan/inf) #NaN speak(nan/null) #NaN speak(nan/nan) #NaN speak(nan/"") #NaN speak(nan/"a") #NaN speak(nan/true) #NaN speak(nan/false) #NaN speak("C2") speak((-10)/nan) #NaN speak((-1)/nan) #NaN speak(0/nan) #NaN speak(1/nan) #NaN speak(10/nan) #NaN speak(inf/nan) #NaN speak(null/nan) #NaN speak(nan/nan) #NaN speak(""/nan) #NaN speak("a"/nan) #NaN speak(true/nan) #NaN speak(false/nan) #NaN
コメントする
コメントするには、ログインする必要があります。
追記:"10"+7でなく1010から3引いてるから1007なんですね
追記>そう、そこでなぜか計算順序が変わってますよね、不思議です。