LoginSignup
4
3

関数で処理の流れを書く「関数フロープログラミング」

Last updated at Posted at 2023-08-10

概用

処理の流れを、トップダウン方式(ウォーターフォール)で主に関数や式を使ったフローで書き、実装は末端の関数でするプログラミングスタイル。やってみると書きやすく、処理の流れもわかりやすい。

Hello Worldで具体例

# flow
def HellowWorld():
  str = SetStr()
  PrintStr(str)

# end
def SetStr():
  return "Hello World!"

# end
def PrintStr(str):
  print(str)

#flowがフローで、#endが実装。

ここまで簡単なプログラムだと冗長に見えるが、問題(処理)が分解され、アルゴリズムの概要が明確。正しいかどうかの検討も容易。

就活で例えると

def 就活(prof)
  履歴書 = 履歴書作成(prof)
  結果 = 履歴書投函(履歴書)
  if 結果 == 合格
    最終結果 = 面接()
  else
    最終結果 = 不合格
  return 最終結果

  def 履歴書作成(prof)
    #実装を書きます

  def 離席書投函(履歴書)
    #実装を書きます

  def 面接()
    #実装を書きます

という感じ。流れが分かりやすいですね。

抽象的な構造の例

# flow
def flow(x):
  x = f(x)
  y = g(y)
  r = h(z)
  return r

  # flow
  def f(x)
    y = r(x)
    z = s(y)
    return z

    # end
    def r(x)
      # implementation

    # end
    def s(x)
      # implementation

  # end
  def g(x)
    # implementation

  # end
  def h(x)
    # implementation

flowとendによる入れ子構造ですが、データ受け渡し含めてそのようでなくてもよく、フローにifやfor、その他処理を含めたり、プログラムの一部に使うなど、好きに改造してOKです。

終わりに

問題を分解することにより、アルゴリズムの複雑さが低減される、書き易い、などのメリットがあります。

デメリットは、フローの制作ができるかどうかや、関数が多くなること、プログラムが縦に長くなることなど。

見やすくするには、関数をネストするのが良いですが、python含めて、理想的にサポートされていないこともあります(pythonはネストされた関数を先に書かなくてはならないので、例の書き方は間違いなのですが、説明のため)。

気に入ったら試してみてください(−ω−)アリガトウゴザイマシタ

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3