FUNC ENDFUNC


 [機能] ユーザー関数を定義する。

 [書式] FUNC 関数名[$](変数1[$] [,変数2[$]]...)   :ENDFUNC [返し値]

 [説明]
  関数名と使用される引数の変数名を指定します。
  関数名は返り値が文字列の場合末尾に $ を付けます。
  括弧内に引数の数だけあてはめる変数を配置します。変数も文字列型の場合 $ を付けます。
  引数を取り扱う計算を記述して最後に返し値を'ENDFUNC 'の後に書きます。(省略時は0かNull文字を返す)
  'ENDFUNC'で元の呼び出した位置に戻ります。
  変数名=関数名(引数[,引数]…)の形で呼び出されます。
  関数定義内(ローカルスコープ)で自動定義された変数と引数の変数はローカル変数になります。
  プログラム冒頭でユーザー関数が呼ばれる前に自動定義されたグローバル変数は
  ローカルスコープ中で出現した時もグローバル変数として取り扱われます。
  ユーザー関数の定義はプログラムのどの場所にでも配置することができます。

 [例] [smp_func.bas]
    10 d=4
    20 f=pow(8,d)
    30 print f
    40 st$=initial$("android")
    50 print st$
    100 func pow(a,b)
    110  c=a^b
    120 endfunc c
    130 func initial$(s$)
    140  if len(s$)>0 then r$=left$(s$,1)
    150 endfunc r$

 [結果]
   4096
  a
  ' この例の場合、グローバル変数 d ローカル変数 a, b, c, s$, r$ となります。
  ' また、関数呼び出しの f, st$ は関数から戻って、代入される時にグローバル変数として定義されます。

 [補足] グローバル変数定義位置の注意点。
    10 f=ts()
    20 d1=0:d2=0
    30 func ts()
    40 d1=1:d2=2
    50 print d1;d2
    60 endfunc

  この例では変数 d1,d2 はグローバル変数の位置にありますが
  実行時に10行でユーザー関数が呼ばれている時点ではまだ自動定義されていません。
  なので40行で現れた時はローカル変数の扱いになります。

  10行の返し値受けの変数'f'も
  ts()関数呼び出しの時点では定義されてない状態です。
  (戻って代入される時に定義されます)

  ユーザー関数で使用されるグローバル変数は、必ず下の例のように
  ユーザー関数が呼ばれる前(10行)と関数定義の前(30行)に
  記述してグローバル変数として自動定義させておいて下さい。

    10 d1=0:d2=0:f=0
    20 f=ts()
    30 func ts()
    40 d1=1:d2=2
    50 print d1;d2
    60 endfunc


  SELECT CASE ENDSELECT


 [機能] '式'の値に応じて、当てはまる命令グループに実行が移ります。

 [書式] SELECT CASE 式:  CASE 値1:  ENDSELECT

 [説明]
  '式'で示された値に応じた'case'以下の命令が実行されます。
  'case else'はどれにも当てはまらなかった時に選択されます。
  '式'で扱うデータは文字変数・定数にも対応しています。

 [例]  [smp_select.bas]
    10 input dat
    20 select case dat
    30  case 1:
    40   color col(15)
    50   print "First"
    60  case 2:
    70   color col(7)
    80   print "second"
    90  case else:
    100   color col(2)
    110   print "Other"
    120 end select