Python

13. Pythonの文法(1)

Pythonの特徴的な文法を少し紹介する。
いずれも簡単なものである。
あるRPG IIIだけの経験者がPythonでIBM iのWeb開発をした実例がある。
Pythonの文法はそれほど簡単である。
この講座で数回、説明するだけでほとんどの人が Pythonのソースを
書けるようになるだろう。

_

(1) Pythonはインデント(=段落)に意味がある

Pythonの最大の言語としての特徴はインデント(=段落)が
文法として大きな意味を持つことである。
 
簡単に言えば他の言語の カッコ({)~閉じカッコ(}) までを
段落した記述で示すだけである。
 つまり条件の部分を段落(=字下げ)して表現することに
決められている。

 例えば ILE-RPGフリー・フォーマットの
IF N > 0;
 N = N + 1;
ENDIF;

C言語であれば
if (N > 0){
 N = N + 1;
}
 という記述はPythonでは
IF N > 0;
 N = N + 1
だけになる。
ENDIF も閉じカッコもない。

さて RPG III以外のどの開発言語でもインデント(=段落)によって
if文などの条件文や LOOP文を示すことが多いが
インデントはあくまで任意であって必須ではない。
しかしPythonの場合は if文やwhileなどの文で
インデント(=段落)は必須であり文法上の意味を持つ。
C言語のように { }(=カッコ)でif文の内容を示すのではなく
インデントによってif文の中身を示すことになる。
 カッコで囲む代わりにインデントで条件分岐を示している。
これがPythonの文法の最大の特徴である。
 これがわかってしまえば Pythonの文法の8割はわかったも
同然である。インデントする桁数に指定はなく見やすいと思われる桁数文の
インデント(=字下げ)をすればよい。

 [例]

  (1) if not DSPHEAD.SHCODE.Chain(SHOHIN): 
        continue 

   … もし表示レコード: DSPHEAD のフィールド: SHCODE で
商品マスター(SHOHIN)にChainしてレコードが見つからなければ(not)
処理を続行する。(continue)

  (2) while True:
        SHOHIN.SHSCOD.Chain(HINSHU)                                   
        DSPDTA01.HNSNAM = HINSHUR.HNSNAM                              
        DSPDTA01.Exfmt()                     #  明細レコード画面を表示

… while True は永続LOOPであり SHOHIN.SHSCOD.Chain(HINSHU)以下の
演算を永続的に繰り返す。while文内に breakがあれば
処理はそこで終了する。

  …このようにPythonではインデントが文法上、必須であるので
誰が書いてもインデントされた見やすいソースになる。
RPG III や固定記入式のILE-RPGではインデントができないので
非常に見にくいソースとなってしまう。
かと言ってもフリー・フォーマットでインデントはできるが
必須ではない。
プログラマーによってはフリー・フォーマットでも
インデントしないで記述する可能性があるが
Pythonではインデントは必須なので必ずインデントされた
ソースが出来上がることになる。
    これによって誰が見ても見やすいソースが出来上がることになる。

(2) IF に対するENDIFは要らない。

_

  (1)の例でわかるように ifに対するendifや while に対する } (=閉じカッコ)など
必要ない。
while の終了した次の命令は外側はwhileと同じ桁位置に書くだけで
それがwhileの次の命令であると解釈される。

…このようにPythonでは ENDIF や ENDDOが不要であるので
ENDxxの記入誤りが発生することはない。

(3) 文末にコロンやセミコロンは要らない

ILE-RPGフリー・フォーマットでは文末にセミコロン(;)が
必要であるし C言語の文末にもセミコロン(;)が必要である。
COBOLでは長い文末の最後にピリオド(.)が必要であるが
Pythonでは文末を示す記号は何も要らない。
改行することが文の終わりと見なされる。

(4) ただし条件分岐にはコロン(:)が必要

ただし条件文の最後にはこれが条件の分岐を表すものとして
コロン(:)が必要となる。
LOOP文も同様である。

  if IN[1]:             
       bCHG = True       
    else if bCHG:  

  やまたは

  while True:

のように条件文の直後には: (=コロン)を必ずも付加して
それが条件句であることを示さなければならない。

…このようにコロンが条件分岐を表しているので
ソースの条件を素早く探すことができるようになる。
セミコロン(;)ではなくコロン(:)なので
ILE-RPGのフリー・フォーマットに慣れた人にとっては
少し間違えやすいかも知れない。(小職も最初はよく間違えた)
_

※ Pythonの文法の特徴的な文法を一部紹介した。
ENDxxが不要であるというのはILE-RPGプログラマーにとって
少し違和感があるかも知れないが慣れれば大したことではない。