宣言的コーディング

Shigeki Suwa

@すわくん

株式会社オロ
デジタルトランスフォーメーション事業部
宣言的エンジニア

Slack

 だいたいプログラミングの話です。

用法、要領を守って正しくお聞きください。

良いコードを書こう!という話

WARNING

TL;DR

納得感には個人差があります。

宣言的 ⇄ 命令的

命令的

HOW

どんな手順で行うか?

順番に説明する。

ボトムアップ

命令的な会話

「今、駅前にいます。
あなたの家に行くにはどうしたらいい?」


「北口から出て右に曲がり、3つ目の交差点を左に・・・」

宣言的

WHAT

それは結局何なのか?

結論から示す。

トップダウン

宣言的な会話

「今、駅前にいます。
あなたの家に行くにはどうしたらいい?」


「住所は XXX YYY 1-2-3 だよ。」

宣言的 ⇄ 命令的

 ナビゲーション

 レシピ

 トラブル対応マニュアル

 アクティビティ図

住所 

料理名 

活動指針 

クラス図 

手続き型・関数型

手続き型プログラミング

C/C++ Java BASIC …

プログラムは手順書である。
コンピュータは手順書のとおりに処理を行い、結果を得る。

コンピュータの仕組みをベースとしたプログラミング手法

チューリングマシン ノイマン型コンピュータ アセンブリ

手続き型のコード

CPUやメモリ等を備えた
コンピュータに対する小さな命令の羅列

HOW:どのように行うか?
計算の手順を記述する

・コンピュータフレンドリー
・命令的コード

function sum (x) {
  let total = 0
  
  for (let i = 1; i <= x; i++) {
    total = total + i
  }
  
  return total
}

sum(10) //=> 55

関数型プログラミング

Haskell F# Scala …

プログラムは関数定義の羅列である。
コンピュータは関数に従って値を計算し、結果を得る。

数学・集合論をベースとしたプログラミング手法

ラムダ計算 集合 写像 論理型/制約型プログラミング

関数型のコード

変数を受け取り、結果を表した「関数」
関数定義の羅列

WHAT:それは何なのか?
計算の性質や対応関係を記述する

・数学フレンドリー
・宣言的コード

function sum (0) = 0
function sum (x) = x + sum(x - 1)

function main = sum(10)
//=> 55

宣言的コーディング

「宣言」

宣言的コーディング 何を「宣言」する?


処理の結果・結論

データの構造・性質

全体像・要約

結論を明らかにする。

命令的コーディング

手続き型プログラミングのように
フロー制御で値を書き換える(HOW)

Good:
 処理の内容は柔軟

 フローチャート的で分かりやすい

Bad:
 最終的にどうなるかが分かりづらい

function main (x) {
  let result = {}
  
  if (x > 0) {
    result.isValid = true
    result.double = x * 2
  } else {
    result.isValid = false
  }
  
  return result
}

宣言的コーディング

関数型プログラミングのように
結果の性質を記述する(WHAT)

Good:
 最終的にどうなるか一目瞭然
 簡潔になる

Bad:
 柔軟さに少し欠ける

function main (x) {
  let isValid = x > 0

  return {
    isValid,
    double: isValid ? x * 2 : null
  }
}

※手続き型言語による宣言的コード

命令的なアタマ

前提条件

先頭から実直に…   結論から逆算して…

最終目的

道筋を考える。

宣言的なアタマ

処理

どのような構造か?   似た性質はあるか?

最終目的

前提条件

処理

処理

分解して結合する。

「宣言」

宣言的コーディング 何を「宣言」する?


処理の結果・結論

データの構造・性質

全体像・要約

結論を明らかにする。

人のためのコード

ものづくりが目的であり、プログラミングはあくまでも手段。

コードを読み書きするのは未だ人間

読みやすいコード ⇒
書き換えやすいコード 
簡潔でバグの少ないコード 

 生産性の高いプロジェクト
 保守性の高いコード
 品質の高いプロダクト

こだわるワケ。

宣言的コーディング

It's over!

Made with Slides.com