Python

15. Pythonの文法(3)

Pythonの文法について少しずつ解説していたが
今回は関数の書き方の話である。
 _

■ 関数の書き方

Pythonにはサブ・ルーチンは存在しない。
一般的な開発言語にあるような
プロトタイプを先に宣言する方法も存在しない。
例えばILE-RPGのプロシージャーやC言語や
VC++でも

(関数のプロトタイプ)
(関数を使用するメイン・ルーチン)
:
(関数の定義)

このように実際の関数は最後のほうに
記述するのだが関数のプロトタイプは
最初に宣言しておく方法である。
ILE-RPGのプロシージャーの定義も
このように最初にプロシージャーの
プロトタイプを宣言しておけば
実際のプロシージャーは最後に
記述するという方法でこの方法は
ILE-RPGのプロシージャー独自の定義ではなくて
一般的な関数の定義の方法である。
_

Pythonではできるだけシンプルに書くという
ポリシーがあって

(関数の実際の定義)
;
(その関数を呼び出すメイン・ルーチン)

の順序で記述するように定められている。
従ってメイン・ルーチンは一番最後に記述される
ことになる。

[例]

#*********************************************************                   
def main():  # メイン・ルーチンの定義                                        
#*********************************************************                   
  while True:                                                                
    DSPHEAD.Exfmt()                          #  初期画面を表示               
    READ_()                                                                  
    DSPEND01.Write()                                                         
    while True:                                                              
      if not SFCTL01.Exfmt();                # SFL コントロールレコードを表示
         break                                                               
      if MID_CHECK() == False:                                               
         continue                                                            
      while SFREC01.ReadChange()    != EOF:                                  
        if DTL_CHECK() == False:                                             
          break 

#*********************************************************
def MID_CHECK(): # DSPTOP の妥当性検査の定義              
#*********************************************************
    if not Chain("MIDKEY", "MIDFIL"):                     
        return False                                      
    return True                                           
#*********************************************************
def DTL_CHECK(): # SFLREC の妥当性検査の定義              
#*********************************************************
    if not CHAIN("SFLKEY", "SFLFIL"):      # TEXT         
        SFLUPD("SFREC01")                                 
        return False                                      
  :
                                                             
main()   # メインルーチンの実行 

_

[解説]

関数: MID_CHECK()と DTL_CHECK()を先に定義しておいてから
メイン・ルーチン : def main() で
if MID_CHECK() == False: や
if DTL_CHECK() == False:のように後で呼び出して使用している。

また関数を実行しているのは最後の

main()   # メインルーチンの実行

だけであることに注意。

def MID_CHECK()や
def DTL_CHECK()や
def main(): は関数の定義であって実行は命令されていない。
最後の

main()   # メインルーチンの実行

だけが実行を示している。つまり実行の前には使用する関数をすべて
定義しておくことが求められる。
実行の前にプロトタイプを指定することはできない。
C言語もPythonのようにプロトタイプを宣言せずに記述かることが
できるが今ではプロトタイプを先に宣言する書き方が主流である。
上記の例ではメインメルーチンを先に書いておいて
後から関数を定義しているがこれは意図的に今のプロトタイプ式の
順序に近い記述としてわかりやすくしたものである。

Pythonの関数は実行前にすべて定義しておくこと

これがわかれば十分である。
_