4. Mファイル

 4.1 ファンクション・Mファイルを用いたプログラムの構成
   通常,ソースプログラムは,ひとつのスクリプト・Mファイルとひとつ或いは複数の
  ファンクション・Mファイルから構成されることが多い。スクリプト・Mファイルは,メイン
  プログラムに相当し,ファンクション・Mファイルはサブプログラムに相当
する。
   分かり易く示すと,次のようになる。
      
              (注意) ファンクション・Mファイルから更に別のファンクション・Mファイル
                   を呼び出すこともできる。

    ファンクション・Mファイルには,ある特定の機能を分担させる。例えば,データの入力,
   ある関数値の算定,連立方程式の解の算定,出力結果の表示などである。つまり,
   プログラムの構造をモジュール化して,個々のモジュールに特定の機能を分担させる。
    スクリプト・Mファイルは,各ファンクション・Mファイルを計算のフローに応じて順に呼び出
   し,得られた計算結果を必要に応じて次のファンクション・Mファイルへ引き渡す。即ち,ス
   クリプト・Mファイルは,ファンクション・Mファイルと必要なデータや計算結果を受け渡ししな
   がら,計算のフローをコントロールする機能を有する。
    このようなプログラム構成とすることにより,プログラム開発者にも第三者にも簡潔で分かり
   易いプログラムとなる。このようにしておくと,後でより効率のよいアルゴリズムのファンク
   ション・Mファイルが開発されたならば,該当ファンクション・Mファイルを置換すればよく,
   他の部分の修正は必要最小限で済ませることができる。
    
 4.2 スクリプト・Mファイルとファンクション・Mファイル
    ファンクション・Mファイルは,スクリプト・Mファイルとは異なる編集画面で作成される。
   このことは,ファンクション・Mファイルは,スクリプト・Mファイルと完全に別のプログラムで
   あることを意味している。それゆえ,両者のプログラムで変数名が同じであっても別々の
   メモリーにそれらの値は保存される。このように1つのプログラムの中だけで有効な変数の
   ことをローカル変数と呼んでいる。
    なお,ファンクション・Mファイルを保存するときは,ファンクション名.mで保存しなければ
   ならない
ことに注意しよう。ファンクション名については,下記の説明を参照のこと。
    では,ファンクション・Mファイルに必要なデータをスクリプト・Mファイルから引き渡すには,
   どのようにすればよいのだろう? ファンクション・Mファイルで得られた結果をスクリプト・
   Mファイルへ受け渡すにはどのようにすればよいのだろう?
    
  (1) スクリプト・Mファイルからファンクション・Mファイルへ
      必要なデータの受け渡し

      これには2つの方法がある。
    グローバル宣言による受け渡し〜受け渡したい変数をスクリプト・Mファイルのプログラム
                       の先頭およびファンクション・Mファイルの先頭でグロー
                       バル宣言する。
                        グローバル宣言された変数はメモリーを共有している
                       ので,両方のプログラムからメモリーの値を参照でき,
                       受け渡しが可能となる。
                               

   
  % script M file
  global para_a para_b
  
  
  sina_b
  
  % End

   
  % function M file
  function sina_b
  global para_a para_b
  
  
  return

                global宣言: 変数名が複数ある場合,空白で区切って横に並べる
             ファンクション名: 上の例ではfunction続くsina_bである。名前のつけ方
                        は変数名のつけ方の規則と同じ。ifとかpiなどの予約語
                        を用いることはできない。
                    
ファンクション・Mファイルの保存ファイル名=ファンクション名
                        上記の例では, sina_b.m とする。
                 return文: return文は,「ファンクション・Mファイルを呼び出した
                       のプログラムに戻りなさい」
を意味する。必要に応じて
                       return文はファンクション・Mファイルに複数置ける。
                       ファンクション・Mファイルのプログラムの最終行に
                       
return文が来る場合には,それを省略できる。

                              

       引数による方法 〜この方法は,ファンクション名の後ろに続けて,引渡しをしたい
                  変数名或いは定数をカンマで区切って( )内に並べる。( )内
                  の変数や定数のことを引数(ひきすう)と呼んでいる。
                   ただし,引数となる変数はファンクション・Mファイルを呼び出す
                  前にあらかじめ値が代入されているものに限られる。
変数名は
                  呼び出す側のプログラムと呼び出される側のプログラムで異なっ
                  ていてもよい。
但し,引数の個数は同じ,対応関係は並びの順番
                  であり、変数の型も一致させることに注意が必要。

  % script M file
  
  para_a=1.0;
  para_b=0.5;
  sina_b(para_a,para_b)
  
  % End

  % function M file
  function sina_b(para_a,para_b)
  
  
  
  return


        以上,2つの方法を混用してもよい。

   (2) ファンクション・Mファイルからスクリプト・Mファイル
      への計算結果の受け渡し

      これには2つの方法がある。
       グローバル宣言による受け渡し
            
この宣言文の使い方は,上の例と同じ。つまり受け渡しをしたい計算結果
           を保存してある変数名を受け渡す側のプログラム,受け渡される側のプログ
           ラムにおいて,グローバル宣言すればよい。
        ファンクション名の前に受け渡し
        変数を算術代入文のように与え
        る方法  
         
             例  Z1=sina_b(para_a,para_b) 
                受け渡す側のプログラム,受け渡される側のプログラムとも同じように
               Z1=sina_b(para_a,para_b) と記述する。
                 ただし,変数名Z1は引数のように両者のプログラムで異なっていて
               もよい。なお,この方法で複数の変数を受け渡しする場合には[ ]内
               に変数をカンマで区切って並べる。 
                 例 [Z1,Z2]=sina_b(para_a,para_b) 

       以上,2つの方法を混用してもよい。なお、引数でファンクション側からスクリプト側へ
      受け渡すことは出来ない。

 プログラミングのトップページへ戻る