黒曜がRubyKaigiで「プログラムの型の推測」で登壇予定
前提知識がけっこう必要
プログラムとは?
型とは?
なにが嬉しいの?
大雑把に上記を解説する
もっと詳しい話が気になったら 1 on 1 とか入れてね
Leaner見積
契約します
ありがとう
ございます!
1. 契約申し込み
契約リスト
2.契約リストに追記
3. 今後の案内をメール送信
契約
アザス!
1.
契約リスト
2.
3.
契約申し込みが来たら、以下の通り対応
契約リストに追記
今後の案内をメール送信
契約
アザス!
1.
契約リスト
2.
3.
契約申し込みが来たら、以下の通り対応
契約リストに追記
今後の案内をメール送信
Leaner見積
契約ボタンポチッ
手順書通り
仕事するよ
1. 契約申し込み
契約リスト
(電子データ)
2.契約リストに追記
3. 今後の案内をメール送信
契約申し込みが来たら、以下の通り対応
契約リストに追記
今後の案内をメール送信
契約申し込みが来たら、以下の通り対応
契約リストに追記
今後の案内をメール送信
プログラム
(手順書)
プログラマー
手順書を作る作業
(プログラミング)
契約申し込みが来たら、以下の通り対応
契約リストに追記
会社名
契約日時
申込者 氏名
申込者 メールアドレス
今後の案内をメール送信
契約申し込みが来たら、以下の通り対応
契約リストに追記
会社名
契約日時
申込者 氏名
申込者 メールアドレス
今後の案内をメール送信
契約申し込み
この情報が
足りなかったら
どうなる?
契約申し込みが来たら、以下の通り対応
契約リストに追記
会社名
契約日時
申込者 氏名
申込者 メールアドレス
今後の案内をメール送信
この情報を書く
列がなかったら
どうなる?
契約リストに追記
契約申し込み
契約申し込みで
送られるデータ
会社名
申込者氏名
申込者メアド
契約日時
会社名
申込者氏名
申込者メアド
契約日時
契約申込み
プログラム
契約リストに
保存できるデータ
会社名
申込者氏名
申込者メアド
契約日時
契約申し込みで
送られるデータ
会社名
申込者氏名
申込者メアド
契約日時
会社名
申込者氏名
申込者メアド
契約日時
契約申込み
プログラム
契約リストに
保存できるデータ
会社名
申込者氏名
申込者メアド
契約日時
ぴったりハマる
↓
プログラムの接合部
(データの受け渡し)で
エラーがないことが
保証される
契約申し込みで
送られるデータ
申込者氏名
申込者メアド
契約日時
会社名
申込者氏名
申込者メアド
契約日時
契約申込み
プログラム
契約リストに
保存できるデータ
会社名
申込者氏名
申込者メアド
ぴったりハマらない
↓
プログラムの問題に
「作業をする前」に
気付ける
# 契約申込みが来たときの手順
def makeContract(
company_name, date,
user_name, user_email
)
# 契約リストに追記
Contract.create!(
company_name:, date:,
user_name:, user_email:
)
# 今後の案内をメール送信
ContractNotificateMail
.deliver_now!(
user_name:, user_email:
)
end
プログラム本体
# 契約手続きに必要な情報の型をそれぞれ明記
def makeContract: (
string company_name,
Date date,
string user_name,
string user_email
)
# 契約リストの保存できる型を明記
class Contract
attr_accessor company_name: string
attr_accessor date: Date
attr_accessor user_name: string
attr_accessor user_email: string
end
プログラムに対する型定義
(既存のプログラムに全部手で書いてくのは結構無理ゲー)
# 契約申込みが来たときの手順
def makeContract(
company_name, date,
user_name, user_email
)
# 契約リストに追記
Contract.create!(
company_name:, date:,
user_name:, user_email:
)
# 今後の案内をメール送信
ContractNotificateMail
.deliver_now!(
user_name:, user_email:
)
end
プログラム本体
# 契約手続きに必要な情報の型をそれぞれ明記
def makeContract: (
string company_name,
Date date,
string user_name,
string user_email
)
# 契約リストの保存できる型を明記
class Contract
attr_accessor company_name: string
attr_accessor date: Date
attr_accessor user_name: string
attr_accessor user_email: string
end
プログラムに対する型定義
僕は機械語しか
わからないよ!
001011010111010110100
011010110110101101010
110101001010100101100
101001001001010111011
101101101010010101010
機械語のプログラム
(手順書)
人間が書きやすい言語(プログラミング言語)
で書いたプログラム
コンピュータが読める言語
(機械語)
で書かれたプログラム
Ruby
001010
専用の手順で
変換するよ!
(コンパイル)
Ruby
日本生まれの言語
人間が書きやすいが、
機械語との乖離が大きく
翻訳(コンパイル)は大変
Ruby
JavaScript
JavaScript
Webブラウザで
よく使われる言語
非常にシンプルなので
機械語に翻訳しやすいが、
人間が書くときに
エラーが混入しやすい
TypeScript
TypeScript
JavaScriptに「型」を
付けられるようにした言語
型の仕組みでエラーを
防ぎやすい。
機械語ではなく
JavaScriptに翻訳して使う