ユーザ定義関数 | HotSoupProcessorの記録

HotSoupProcessorの記録

コンピューター言語 HotSoupProcessor の練習記録です

ずいぶんお久しぶりです。
特に何があったというわけではありませんが
なんとなく遠ざかっておりました。ぐぅぐぅ

やりたいときがベストタイミングってことで
ふとやってみました。
自分で作った関数定義です。

-----
; 自作関数(正式にはユーザ定義関数)
  goto *MainProgram

; 足し算関数
#defcfunc myAdd int a, int b
  return a+b

; 引き算関数
#defcfunc mySub int a, int b
  return a-b

; メイン関数
*MainProgram
  ansAdd = myAdd( 10, 20 )
  mes "10+20=" + ansAdd

  ansSub = mySub( 40, 30 )
  mes "40-30=" + ansSub

  stop

----
前回、少しびびっていましたが、たいしたことはない感じ。
あえて言えば、プロトタイプ宣言したい感じ。

あと気をつけなくちゃいけないことが、変数のすべてがグローバル変数的な扱いになる。
つまり、myAdd()内で定義した変数を、mySub()で参照・変更が可能ということ。
これは危ないねってことで、モジュール化して固めるらしいです。
あ、あと、ラベルの重複防止も兼ねて。

それがこんな感じ。
-----
; 自作関数(正式にはユーザ定義関数)
  goto *MainProgram

#module
; 足し算関数
#defcfunc myAdd int a, int b
  return a+b
#global

#module
; 引き算関数
#defcfunc mySub int a, int b
  return a-b
#global

; メイン関数
*MainProgram
  ansAdd = myAdd( 10, 20 )
  mes "10+20=" + ansAdd
  
  ansSub = mySub( 40, 30 )
  mes "40-30=" + ansSub

  stop

----
変更点
・#module
 ~
 #global
  で囲みました。
こうすると、関数名以外は同じ変数名・ラベルを使ってもいい。

さらに関数名もかぶるよ!という場合は、モジュールに名前も付けられます。
----
; 自作関数(正式にはユーザ定義関数)
  goto *MainProgram

#module myModAdd
; 足し算関数
#defcfunc local myCalc int a, int b
  return a+b
#global

#module myModSub
; 引き算関数
#defcfunc local myCalc int a, int b
  return a-b
#global

; メイン関数
*MainProgram
  ansAdd = myCalc@myModAdd( 10, 20 )
  mes "10+20=" + ansAdd
  
  ansSub = myCalc@myModSub( 40, 30 )
  mes "40-30=" + ansSub

  stop

----
変更点
・#moduleの後ろに名前をつけました。
・関数名を2つ同じにしました。
・関数名の前にlocalをつけました。

localは・・・よくわからないから今のところはお決まりの呪文だと覚えておくことにします。合格