共通ルール


型について

「くまりす」で取り扱うことのできる値には、下記のような種類があります。この種類のことを「型」と呼びます。

  • 文字列は、0文字以上の文字の並びです。0文字の場合、特に「空文字列」と呼びます。ブロックの文字入力欄に何も記入しない場合、「値なし」ではなく、空文字列となります。数値の形式の文字列は「数値」となります。
  • 数値は、算数における数です。数値の形式に一致する文字列は即座に数値となります。正負の整数・少数を取り扱うことができます。虚数・無限数・分数は取り扱うことができません。各種の計算においては、「数値共通ルール」が適用されます。
  • リストは、値を入れることができる入れ物です。中身には、全ての型の値を入れることができ、それぞれの値のことを「項目」と呼びます。リストの項目には、1から順に順番が付けられています。リストの中にリストや行を入れ、「入れ子」にすることができます。
  • (レコード)も、リストと同様、値を入れることができる入れ物です。名前を付けた「」に、全ての型の値を入れることができます。同じ名前で複数の列を作ることはできません。値としてリストや行を入れ、「入れ子」にすることができます。
  • 値なし、あるいは「値なし/エラー/キャンセル」は、計算結果がエラーだったり、選択をキャンセルされた場合に発生する特殊な値です。ブロックの文字入力欄に何も記入しない場合、「値なし」ではなく、空文字列となります。
  • キャラクターマップウィンドウデータベースサウンドイベントは、作品の編集時に作成できるオブジェクトです。
  • 画像も作品の編集時に作成できるオブジェクトですが、加えて縦・横の位置を保持しています。縦・横の位置は、画像を縦・横に分割している場合に、分割されたそれぞれの画像を指します。分割を行っていない場合、縦1、横1のみが有効な画像です。

ℹ️ 「Scratch」の使用経験がある方へ

Scratch」と「くまりす」は同じ「スクラッチブロック」を使用していますが、取り扱うことのできる型には大きな違いがあります。

  • 「Scratch」には、行、値なし、キャラクター、マップ、ウィンドウ、データベース、サウンド、イベント、画像の型はありません。
  • 「くまりす」のリストは、文字列・数値だけではなく、全ての型の値を入れることができ、2次元・3次元の配列も作成できます。「Scratch」のリストは、通常の変数と異なるリスト専用の変数を使用しますが、「くまりす」では、通常の変数にリスト型の値を入れます。
  • 「くまりす」には真偽値はありません。※システム内部では、「値なし」を偽とし、それ以外を真としています。
  • 「くまりす」では、Infinity/-Infinity/NaNは全て「値なし」になります。また、「数値共通ルール」に従って、数値の大きさには制限が設けられており、小数点には丸めがあります。

文字列の比較について

文字列の比較は、文字コード(UNICODE)での比較になります。

  • 半角アルファベットは、小さい方から A, B, C…X, Y, Z, a, b, c…x, y, z となります。
  • 全角ひらがな・カタカナの50音は、小さい方から あ、い、う…ん、ア、イ、ウ…ン となります。
  • 漢字はユニコード順となるため、日本語として意味のある並び順とはなりません。
  • 1文字目が同じ文字の場合は2文字目で比較し、2文字目も同じ文字の場合は3文字目…で比較します。
  • 比較する位置に文字がない場合、文字がない方が小さくなります。空文字列は一番小さいと判断されます。
    (例 あいう は あいうえ より小さい) (例 空文字列は あ より小さい)
ℹ️ Javascript/ESMAScriptでの不等号演算子による文字列比較と同じです。

等価性判定ルール

「くまりす」では、値が等しいか否かを判定するとき、下記のようなルールを適用します。

  • 両方が数値の場合、数値として比較します。
    (例 100 と 100.0 は等しい)
    (例 -0 と 0 は等しい)
  • 両方が値なしの場合、等しいとします。
  • 両方が画像の場合、同一の画像で同一の位置の場合に等しいとします。
  • **両方が同じ種類のオブジェクト(キャラクター、マップ、ウィンドウ、etc。ただし画像を除く)***の場合、同一のオブジェクトを指している場合に等しいとします。
  • 両方がリスト、行(レコード)の場合、同一のリスト・行を指している場合に等しいとします。

リスト・行については、内容の比較ではなく、同一の「入れ物」を指しているかを判定していることに注意してください。

例1.下記の例では、変数1と変数2のリストの内容は同じですが、 異なる入れ物を指しているため、「異なる」が表示されます。

(変数1)に ((くま)だけのリスト)をセットする
(変数2)に ((くま)だけのリスト)をセットする
メッセージ(<(変数1)=(変数2)>ならば(同一)でなければ(異なる))を表示する

例2.下記の例では、変数1、変数2は同一の「入れ物」を指しているため、 「同一」が表示されます。

(変数1)に ((くま)だけのリスト)をセットする
(変数2)に (変数1)をセットする
メッセージ(<(変数1)=(変数2)>ならば(同一)でなければ(異なる))を表示する

数値共通ルール

「くまりす」では、数値を取り扱うとき、下記のようなルールを適用します。

  • 数値の最大値は9,007,199,254,740,991(2の53乗-1)です。この値を超える場合「値なし」となります。ゼロで除算を行った場合も同じく「値なし」となります。
    (例:9007199254740991 + 1 ⇒ 値なし)
    (例:1 ÷ 0 ⇒ 値なし)
  • 数値の最小値は-9,007,199,254,740,991(マイナス2の53乗+1)です。この値未満の場合「値なし」となります。
    (例:-9007199254740991 - 1 ⇒ 値なし)
  • 数値は小数点以下10桁までとし、11桁以下は近い値に丸めます。
    (例:1 ÷ 100 ⇒ 1)
    (例:1.00000049 ÷ 100 ⇒ 1)

数値の形式

「くまりす」では、数値の形式を持つ文字列は即座に数値となります。数値の形式は下記のようになります。

  • 先頭・末尾の空白は無視されます。
    (例 「 10 」= 10)
  • **1文字以上の半角数字(0, 1, 2… 9)**ならば、数値です。
    (例 「01234」= 1234)
  • 半角ピリオド(.)と半角数字の連続により、小数点以下を表します。整数部分を省略して記述することも可能です。
    (例 「123.123」= 123.123)
    (例 「.123」= 0.123)
  • 空白を除いた先頭に半角のプラス、マイナス( + - )があれば、正負を表します。
    (例 「+123」= 123)
    (例 「-123」= -123)
  • 指数表記が可能です。最後に 半角 e または E、正負記号、1文字以上の半角数字 の順で記述します。正負記号は省略できます。
    (例 「10e2」= 1000)
    (例 「100E-1」= 10)

「プレイ時間」について

プレイ時間は、作品が実行開始された時間からの合計時間です。セーブデータは、プレイ時間を保存しています。

  • 「プレイを開始する」ボタンや、作品の編集中に「実行」ボタンを押して開始した場合、実行開始から現在までの時間です。
  • プレイ中にセーブし、その後にセーブデータをロードした場合、セーブした時までのプレイ時間+ロードした時から現在までの時間です。
ℹ️ プレイ時間は、ブラウザーを実行しているコンピューター・タブレット・スマートフォンに設定された時刻に依存しています。作品の実行中にコンピューター・タブレット・スマートフォンの時間が変更された場合の動作は規定されていません。また、現在の「くまりす」には、コンピューター・タブレット・スマートフォンで時刻が変更されたことを検知したり、変更を防いだりする方法はありません。

「実行する」と「並行実行する」の違いについて

変数、イベントの発生、キャラクターの動作、マップの表示・消去、ウィンドウの表示・消去などを監視するブロック(ハットブロック)では、ドロップダウンで「実行する」「並行実行する」の選択を行うことができます。

  • 「実行する」を選択した場合、呼び出した側となったブロックは、呼び出された側のブロックの処理が終了するまで、実行を待機します。
  • 「並行実行する」を選択した場合、呼び出した側となったブロックは、呼び出された側のブロックの処理が終了しなくても、実行を継続します。

ℹ️ コンピューターの並行動作に詳しい方、あるいは「くまりす」の並行実行の仕組みを 詳しく知りたい方へ

現状、「くまりす」での作品の実行は、ThreadやWebWorker APIを使用しない、 シングルスレッドのJavascriptで動作します。従って、「並行実行する」動作は、 本来の意味での並行動作(マルチスレッド)で実行しているわけではありません。

並行動作する」の指定で呼び出された側の処理は、何らかの待機動作が発生する タイミングまで実行され、一旦呼び出した側に動作を戻します。その後、呼び 出した側は、そのブロックに続くブロックの動作を実行します。

動作する」の指定で呼び出す処理の場合も、呼び出された側の処理で 何らかの待機動作が発生するタイミングまで実行され、一旦動作を戻す所までは 同様ですが、呼び出した側の処理は呼び出された側の処理が終了するまで待機 を行う、という点が異なります。

なお、上記は現状の「くまりす」の内部動作であり、今後実装が変わる可能性もある点、 ご留意下さい。

文字列分割ルール

( )の題で( )から選択する([ ▼])」ブロックなど、 選択肢を指定する場合で、選択肢を文字列で指定する場合、下記のルールにしたがって文字列を分割します。上に記述された条件が優先され、1つだけ適用されます。

  • 文字列に改行が含まれる場合は、改行で分割します。 文字列の最後が改行の場合、その改行は無視します。
  • 文字列に半角カンマ(,)が含まれる場合は、半角カンマで分割します。 カンマに続けて半角スペースがある場合は削除されます。
  • 文字列に読点「、」が含まれる場合は、読点で分割します。
  • 文字列に半角スペースが含まれる場合は、半角スペースで分割します。 半角スペースが2個以上続く場合、2つ目以降の半角スペースは無視します。
  • 文字列に全角スペースが含まれる場合は、全角スペースで分割します。 全角スペースが2個以上続く場合、2つ目以降の全角スペースは無視します。

色の指定形式

背景色や文字色などの色を指定する場合、16進数6桁の文字列で指定します。
16進数の表記には、半角数字、半角A~F、a~fを使用できます。
先頭に半角シャープを付いている場合は無視します。

(例 #ffffff ⇒ 白)
(例 #000000 ⇒ 黒)
(例 0000ff ⇒ 青)
(例 FF0000 ⇒ 赤)