はじめる! Squirrel 第2章 変数と値とデータ型 その1

今日は第2章です。

新しいプログラミング言語を知るにはまずデータ型から。今日はデータ型、リテラル、そして文字列操作(えっ)と変数について読みます。

  • Squirrel のデータ型
  • 整数についてはそのバイト幅や多倍長整数なのかが気になるところですね。また浮動小数点数もどの精度なのでしょう。
  • Squirrelリテラル構文
    • 整数は10進数表記のほか、8進数表記(0 を先頭につける)、16進数表記(0x を先頭につける)、文字コード表記(シングルクオートで文字をくくる。C 言語と同じですね)が可能
    • 浮動小数点数は小数表記のほか対数表記も可
    • 文字列はダブルクオートで括る記法と、@"" と @ を前置する記法がある。@ つきは文字列中のタブや改行をそのまま取り込む。逆に言うと @ なしの時に改行すると*エラーになる*。ちなみにタブはエラーにはなりませんでした。また @ つきは改行をそのまま文字列に含めることができるかわりにエスケープシーケンスは認識しないようです。どっちもどっちというか、なんでこの2種類に分かれているんでしょうね
  • 文字列操作
    • 文字列の連結は + 演算子
    • 文字列の長さを得るには str.len() なおマルチバイト文字は文字数ではなくバイト数を返す
    • 部分文字列の切り出しは str.slice(start[, end]) start から end-1 までが切り出される。(インデックスは 0 オリジン)
      • 位置の指定が範囲を越えていたり、end < start の関係だとエラーになる
      • ただし負の数は末尾から数えたインデックスとして解釈される
    • 文字列の探索 str.find(substr[, index])
      • index は探索の開始位置を指定するインデックスで、負値での指定も可能
      • みつからなかった時は null を返す
        • ちなみに print(null) すると (null : 0x0x0) と表示されました
    • 文字列の大文字小文字変換
      • str.toupper()
      • str.tolower()
  • 変数
    • 変数は「データを保存する領域に名前をつけたもの」
    • ラベル法による説明なので C の変数に似ているのでしょう
    • 変数には「代入」が可能
    • 変数のスコープ
      • スコープの種類についてはこの章では説明されない(えー)
    • ローカル変数
      • local var = val; のような宣言つき代入文で作成される
      • ローカル変数はその宣言のスコープ内でのみ参照できる
    • グローバル変数
      • var <- val; のような代入文(?) で作成される
    • 変数の探索順序
      • ローカル変数とグローバル変数は同じ名前のものが混在できる。同じ名前の場合ローカル変数のほうが先に参照される
      • グローバル変数を明示的に参照するには ::var のように "::" をつける
    • ルートテーブル
      • グローバル変数は「ルートテーブル」と呼ばれる関数やクラスを登録するテーブルに値を格納することで実現している
    • 変数の型
      • 変数には型がない(データが型を持つ)。動的型付け
      • typeof 演算子でデータの型を文字列で返す。演算子なので括弧は不要
    • const
      • 変数の宣言の頭に const をつけると再代入を禁止した変数を作ることができる。ただし宣言時の右辺値に式を置けない(リテラルのみ?)

第2章はもう少しだけ残っていますが今日はここまで。