Category:Home/tutorial (Total 12 items)

≪ Repetition | Psyco specialization ≫

Commands

fromhttp://nodebox.net/code/index.php/Commands

NodeBoxリファレンスhttp://nodebox.net/code/index.php/Referenceの定義済みのコマンドとは別に、あなた自身でカスタムコマンドを定義できる。
コマンドを作成することは、スクリプトのある動作や断片を再利用するデザイン戦略である。

画像省略

例えば上の例では、花を描くための全ての動作(線と接続した10個のレッドーピンクの円)は、手軽なflower()コマンドにグループ化されている。
このコマンドは一回でも100回でも1000回でも呼び出せる。
花を描く方法を変更したければ、コードの1つの箇所を変更するだけである。

コマンドを定義することは、何度も使うことが出来る道具のセットを使って、道具箱を構成するのと同じである。

Command definition

シンプルな例として、独自に定義した header()コマンドを下記に記す。

def header(txt, x, y):
  fill(1, 0, 0)
  font("Dolly-Bold", 18)
  text(txt, x, y)

コマンドの定義はdefで始める。続いてコマンドの名前(関連性のある名前を付けよ)、次いでパラメータのリストが来る。
行の最後に:コロンを付けるのを忘れないように。これは、続くインデントされたステートメントがそのコマンドであるということをNodeboxに伝えるためである。

Naming conventions:

  • コマンドが何をするのかの記述となるような、シンプルで関連性のある名前を使え。
  • 小文字とアンダースコアを使えlower_case_with_underscores。(imagesizeのような不可欠なコマンドは除く)
  • コマンドがTrueかFalseを返すものなら頭にisを付けろ。: is_white, is_alive, is_big, ...
  • 値を変化させて返すコマンドには頭に動詞を付けろ。: adjust_contrast, strip_tags, ...

Parameters

コマンド定義はそれ自身では実行されない。:
あなたが代りにNodeBoxに何かを教えている。 (例えば、headerが何か?)
コマンド定義はスクリプトのどこかで呼び出される必要がある。
これが、パラメータを入れさせる所である。:
header()の定義がどうtxt,x,yを使用するかに注意せよ。

これらは変数の定義のように使用される。
一度コマンドが呼び出され、txt,x,yに実際の値を与える。

header("Templating", 20, 40)

これでNodeboxは、header()で定義された全てのコードに、textへ"Templating",xへ20、yへ40が実行される。

Return value

NodeBox内のコマンドが返す値を持っており、変数を保持できることに注意。
例えば、textheight(txt, w) は表示されたtxtのパラグラフの高さを、幅と共に返す。

def paragraph(txt, x, y, w):
  fill(0.2)
  font("Dolly-Roman", 14)
  text(txt, x, y, w)
  return textheight(txt, w)

定義でのreturnステートメントは値を返す。
これは数値、文字列、リストなんででもできる。
returnステートメントは定義の最後にいつもくる。

Example

下の例では、2つのスクリプトとも同じ動作をする。
片方は上から下へプレーンに使用していて、片方はテンプレートを使用している。
実際には最初のコードの方が短い、しかし、2つでなく20個のパラグラフを書くことを想像せよ。
…フォントを定義して、カラーもまた定義して…結局ロボットに何か説明する別のロボットが欲しくなるだろう。

そのうえ、ヘッダのカラーや、水平マージンを変更するには2番目のスクリプトがはるかに簡単である。
なぜなら、header()の定義を変えるか、変数xの値を変えるかのただ一回で済むから。

1st:plain top-to-bottom scripting.

fill(1, 0, 0.25)
font("Dolly-Bold", 14)
txt = "Without templating"
text(txt, 20, 30, 200)

fill(0.2)
font("Dolly-Roman", 14)
txt = "Without templating, ..."
text(txt, 20, 50, 200)

fill(1, 0, 0.25)
font("Dolly-Bold", 14)
txt = "Messy"
text(txt, 20, 120, 200)

fill(0.2)
font("Dolly-Roman", 14)
txt = "This makes your script...."
text(txt, 20, 140, 200)

2nd:The same script with templates.

def header(txt, x, y):
    fill(1, 0, 0.25)
    font("Dolly-Bold", 14)
    text(txt, x, y, outline=True)
    return textheight(txt)

def paragraph(txt, x, y, w):
    fill(0.2)
    font("Dolly-Roman", 14)
    text(txt, x, y, w, outline=True)
    return textheight(txt, w)

x = 20
y = 30
w = 200

y += header("With templating", x, y)
txt = "With templating, ..."
y += paragraph(txt, x, y, w) + 10

y += header("Clean", x, y)
txt = "This keeps your script..."
paragraph(txt, x, y, w)

Category:Home/tutorial (Total 12 items)

≪ Repetition | Psyco specialization ≫

Entries in this Category
Tutorial
Library
Syndicate this site

RSS 1.0 Feed

Return to page top