この投稿はまだ作業中です。
ノウハウ集というか、リファレンス集になるようなものを書いていこうと思っています
自分の必要に応じて増えていきます。
型
基本型
基本型は以下の通りです。
型名 | 説明 | Pure bashの場合 |
---|---|---|
string | 文字列型 | declare -- <name> |
integer | 数値型 | declare -i <name> |
array | 配列 | declare -a <name> |
map | 仮想配列 | declare -A <name> |
boolean | 真偽値 | 存在しません。 |
このほかにも、ユーザーが定義することもできます。(多分)(型の概念間違ってたらごめんなさい)
各変数は、他の言語と同じように型名を使って宣言できます。
# string型の 'text'変数
string text
# 数値型の 'number'変数
integer number
# 配列の list
array list
# 仮想配列のtable
map table
# 真偽値の is_it
boolean is_it
これを使用することで、各種ハンドラが使用可能になります。
使わずにdeclare
等を使って定義した場合、各種ハンドラを使用するにはvar:
を使用する必要があります(後述)
ハンドラ
変数に、特殊な方法でアクセスすることで各型の「ハンドラ」を利用することができます。
ハンドラを利用すると、ソートや大文字/小文字への変換等のメゾットを利用することができます。
ハンドラを使用する方法は二つあります。
| 方法 | 例 | 備考 |
| $var:<name> <handler>
| $var:text toUpper
| oo-framework独自の変数定義(上で解説した方法)で作成された変数にのみ有効 |
| var: <name> <handler>
| var: text toUpper
| どんな変数にも適用可能です |
ここから先、$var:<name>
で示されている部分はvar: <name>
でも置き換え可能です。
array
配列型。
array newArray
操作 | method | 例 | 備考 |
---|---|---|---|
定義 | array <name> |
array newArray |
|
値の取得 | $var:<name> get <index> |
newArray get 1 |
|
値の設定 | $var:<name> set <index> <value> |
newArray set 1 "test" |
= は使えない!! |
forEach |
$var:<name> forEach 'expression'` |
$var:newArray forEach 'echo ${item}' |
引数として渡された文字列はそのまま関数になって実行される |
定義: array
method | 例 | 備考 |
---|---|---|
array <name> |
array newArray |
配列の定義。
この形で定義すると$var:<name>
のハンドラが使えるようになります
値の取得:
method | 例 | 備考 |
---|---|---|
値の取得 | $var:<name> get <index> |
newArray get 1 |
array forEach
操作 | method | 例 | 備考 |
---|---|---|---|
forEach | $var:<name> forEach 'expression' |
$var:newArray forEach 'echo ${item}' |
引数として渡された文字列はそのまま関数になって実行される |
forEach
の第一引数に渡した文字列は、そのまま関数になって実行される。
この時、二つの変数が元から定義されている:
名前 | 用途 |
---|---|
index |
現在の要素番号 |
item |
その配列のindex 番目の要素 |
つまり、以下のコードは:
## newArray is ( "a" "b" "c" "d" )
$var:newArray forEach 'echo "${index}" is : ${item}'
以下の結果をもたらします
1 is : a
2 is : b
3 is : c
4 is : d
クラス定義
import util/class
クラスを定義するには、以下のようにします:
class:<class_name>() {
# 中身
}
例(公式から引用+改変):
class:Human() {
public string name
public integer height
public array eaten
Human.__getter__() {
echo "I'm a human called $(this name), $(this height) cm tall."
}
Human.Eat() {
[string] food
this eaten push "$food"
# 値が代入された文字列を返します:
@return:value "$this just ate $food, which is the same as $1"
}
# 静的メゾットにするには`::`を使用します
Human::PlaySomeJazz() {
echo "$(UI.Powerline.Saxophone)"
}
}
クラスの書式
プロパティ
基本形:
<修飾子> <public/private> <型名> <変数名> <初期化文>
(名称は非公式です)
このうち、型名
と変数名
、privateもしくはpublic
のみ必須です。
そのため、最小の形は以下のようになります
public string name
修飾子
その変数についての設定がなされます。
public
/private
以外は重ねて使うことができます。
|:-: |:-: |
| @required
| 必須な引数にする(?) |
| @global
| グローバル変数にする |
| @handleless
| ハンドラを生成しない |
| public
| パブリックなプロパティにする |
| private
| プライベートなプロパティにする(外部からアクセス不可...なはず) |
初期化式
各プロパティの初期値を設定します。
これには、各型のクラスメゾットを使っての代入を行います。
詳細は、lib/TypePrimitives/
以下のファイルを参照してください
| 文字列の初期化 | <name> = <string>
|
| 配列の初期化 | <name> set <string_1> <string_2>
|
尚、変数宣言と同時の代入の場合は少し異なり、以下のようになります
boolean name=value
なぜかはわかりませんが、boolean
型のみ対応している模様です
クラスのイニシャライズ
初期化というよりは、クラスを使えるようにするための宣言です。
(bash
が元々クラスに対応していないため、特殊な操作が必要になります。)
とはいっても、これを実行するだけ
# クラス作成
Type::Initalize <class_name>
# 静的クラスにしたい場合は代わりにInitializeStaticを使う
Type::InitializeStatic <class_name>
これをすることで、クラスを使用することができるようになります
インスタンスの作成
コンストラクタは現在存在しない模様。
<class_name> <instance_name>
例:
Person bob
静的クラスの利用
<class_name> <method>
<class_name> <property>