LoginSignup
1
0

More than 5 years have passed since last update.

bash-oo-frameworkリファレンス [WIP]

Last updated at Posted at 2018-11-14

この投稿はまだ作業中です。
ノウハウ集というか、リファレンス集になるようなものを書いていこうと思っています
自分の必要に応じて増えていきます。


基本型

基本型は以下の通りです。

型名 説明 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>
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0