Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
なおき きしだ
PDF, PPTX
3,390 views
Javaプログラミング入門
JJUG CCC 2016 Spring資料 Javaでプログラミング入門です。Javaの入門ではないのであしからず。
Software
◦
Read more
3
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 97
2
/ 97
3
/ 97
4
/ 97
5
/ 97
6
/ 97
7
/ 97
8
/ 97
9
/ 97
10
/ 97
11
/ 97
12
/ 97
13
/ 97
14
/ 97
15
/ 97
16
/ 97
17
/ 97
18
/ 97
19
/ 97
20
/ 97
21
/ 97
22
/ 97
23
/ 97
24
/ 97
25
/ 97
26
/ 97
27
/ 97
28
/ 97
29
/ 97
30
/ 97
31
/ 97
32
/ 97
33
/ 97
34
/ 97
35
/ 97
36
/ 97
37
/ 97
38
/ 97
39
/ 97
40
/ 97
41
/ 97
42
/ 97
43
/ 97
44
/ 97
45
/ 97
46
/ 97
47
/ 97
48
/ 97
49
/ 97
50
/ 97
51
/ 97
52
/ 97
53
/ 97
54
/ 97
55
/ 97
56
/ 97
57
/ 97
58
/ 97
59
/ 97
60
/ 97
61
/ 97
62
/ 97
63
/ 97
64
/ 97
65
/ 97
66
/ 97
67
/ 97
68
/ 97
69
/ 97
70
/ 97
71
/ 97
72
/ 97
73
/ 97
74
/ 97
75
/ 97
76
/ 97
77
/ 97
78
/ 97
79
/ 97
80
/ 97
81
/ 97
82
/ 97
83
/ 97
84
/ 97
85
/ 97
86
/ 97
87
/ 97
88
/ 97
89
/ 97
90
/ 97
91
/ 97
92
/ 97
93
/ 97
94
/ 97
95
/ 97
96
/ 97
97
/ 97
More Related Content
PDF
Unity + C#講座①
by
Yu Yu
PPTX
C++14言語編
by
Mitsuru Kariya
PDF
研究会20140512:研究テーマ決めとvimを少々
by
Peinan ZHANG
PPTX
クソザコ鳥頭が非順序連想コンテナに入門してみた
by
Mitsuru Kariya
PPTX
そんな装備で大丈夫か?
by
2celeb
PDF
やさしく知りたいC言語
by
uru nru
PPT
Start!! Ruby
by
mitim
PDF
C言語講習会2
by
odenhadengaku
Unity + C#講座①
by
Yu Yu
C++14言語編
by
Mitsuru Kariya
研究会20140512:研究テーマ決めとvimを少々
by
Peinan ZHANG
クソザコ鳥頭が非順序連想コンテナに入門してみた
by
Mitsuru Kariya
そんな装備で大丈夫か?
by
2celeb
やさしく知りたいC言語
by
uru nru
Start!! Ruby
by
mitim
C言語講習会2
by
odenhadengaku
Viewers also liked
PDF
JavaOne2016報告
by
なおき きしだ
PDF
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
by
なおき きしだ
PDF
プログラマは何を勉強するか
by
なおき きしだ
PDF
コンピューティングとJava~なにわTECH道
by
なおき きしだ
PPTX
人工知能に何ができないか
by
なおき きしだ
PDF
Your code sucks, let's fix it - DPC UnCon
by
Rafael Dohms
PDF
JavaOne2017で感じた、Javaのいまと未来 in 大阪
by
なおき きしだ
PDF
JavaOne報告2017
by
なおき きしだ
PDF
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
by
なおき きしだ
PDF
増え続ける情報に対応するためのFPGA基礎知識
by
なおき きしだ
PDF
オブジェクト指向やめましょう
by
なおき きしだ
PDF
良質なコードを高速に書くコツ
by
Shunji Konishi
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
PDF
オブジェクト指向できていますか?
by
Moriharu Ohzu
PDF
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
by
なおき きしだ
JavaOne2016報告
by
なおき きしだ
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
by
なおき きしだ
プログラマは何を勉強するか
by
なおき きしだ
コンピューティングとJava~なにわTECH道
by
なおき きしだ
人工知能に何ができないか
by
なおき きしだ
Your code sucks, let's fix it - DPC UnCon
by
Rafael Dohms
JavaOne2017で感じた、Javaのいまと未来 in 大阪
by
なおき きしだ
JavaOne報告2017
by
なおき きしだ
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
by
なおき きしだ
増え続ける情報に対応するためのFPGA基礎知識
by
なおき きしだ
オブジェクト指向やめましょう
by
なおき きしだ
良質なコードを高速に書くコツ
by
Shunji Konishi
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
オブジェクト指向できていますか?
by
Moriharu Ohzu
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
by
なおき きしだ
Similar to Javaプログラミング入門
PDF
関数プログラミング入門
by
Hideyuki Tanaka
PDF
たのしい関数型
by
Shinichi Kozake
KEY
Clojure programming-chapter-2
by
Masao Kato
PDF
F#入門 ~関数プログラミングとは何か~
by
Nobuhisa Koizumi
PDF
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
by
Ouka Yuka
PDF
Scalaプログラミング・マニアックス
by
Tomoharu ASAMI
PDF
Design by contractとホーア論理
by
Takuya Matsunaga
PDF
Haskell Lecture 1
by
Yusuke Matsushita
PDF
関数プログラミング入門
by
masatora atarashi
KEY
Algebraic DP: 動的計画法を書きやすく
by
Hiromi Ishii
PPTX
函数プログラミングのエッセンスと考え方
by
啓 小笠原
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
by
Hiromi Ishii
PDF
磯野ー!関数型言語やろうぜー!
by
Ra Zon
PDF
関数型都市忘年会『はじめての函数型プログラミング』
by
Kenta USAMI
PDF
関数型プログラミング入門 with OCaml
by
Haruka Oikawa
PDF
命令プログラミングから関数プログラミングへ
by
Naoki Kitora
KEY
by
a-hisame
PDF
第2回関数型言語勉強会 大阪
by
Naoki Kitora
PDF
プログラミング
by
saireya _
PPTX
サンプルで学ぶAlloy
by
NSaitoNmiri
関数プログラミング入門
by
Hideyuki Tanaka
たのしい関数型
by
Shinichi Kozake
Clojure programming-chapter-2
by
Masao Kato
F#入門 ~関数プログラミングとは何か~
by
Nobuhisa Koizumi
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
by
Ouka Yuka
Scalaプログラミング・マニアックス
by
Tomoharu ASAMI
Design by contractとホーア論理
by
Takuya Matsunaga
Haskell Lecture 1
by
Yusuke Matsushita
関数プログラミング入門
by
masatora atarashi
Algebraic DP: 動的計画法を書きやすく
by
Hiromi Ishii
函数プログラミングのエッセンスと考え方
by
啓 小笠原
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
by
Hiromi Ishii
磯野ー!関数型言語やろうぜー!
by
Ra Zon
関数型都市忘年会『はじめての函数型プログラミング』
by
Kenta USAMI
関数型プログラミング入門 with OCaml
by
Haruka Oikawa
命令プログラミングから関数プログラミングへ
by
Naoki Kitora
by
a-hisame
第2回関数型言語勉強会 大阪
by
Naoki Kitora
プログラミング
by
saireya _
サンプルで学ぶAlloy
by
NSaitoNmiri
More from なおき きしだ
PDF
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
by
なおき きしだ
PDF
GraalVM at Fukuoka LT
by
なおき きしだ
PDF
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
by
なおき きしだ
PDF
GraalVMについて
by
なおき きしだ
PDF
VRカメラが楽しいのでブラウザで見たくなった話
by
なおき きしだ
PDF
最近のJava事情
by
なおき きしだ
PDF
怖いコードの話 2018/7/18
by
なおき きしだ
PDF
Java新機能観察日記 - JJUGナイトセミナー
by
なおき きしだ
PDF
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
by
なおき きしだ
PDF
これからのコンピューティングの変化とこれからのプログラミング at 広島
by
なおき きしだ
PDF
Summary of JDK10 and What will come into JDK11
by
なおき きしだ
PDF
Summary of JDK10 and What will come into JDK11
by
なおき きしだ
PDF
Java10 and Java11 at JJUG CCC 2018 Spr
by
なおき きしだ
PPTX
New thing in JDK10 even that scala-er should know
by
なおき きしだ
PPTX
Java Release Model (on Scala Matsuri)
by
なおき きしだ
PDF
これからのJava言語と実行環境
by
なおき きしだ
PPTX
乱数のたのしい話
by
なおき きしだ
PDF
JavaOne2015報告またはこれからのJava
by
なおき きしだ
PDF
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
by
なおき きしだ
PDF
機械学習プロ生20151121
by
なおき きしだ
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
by
なおき きしだ
GraalVM at Fukuoka LT
by
なおき きしだ
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
by
なおき きしだ
GraalVMについて
by
なおき きしだ
VRカメラが楽しいのでブラウザで見たくなった話
by
なおき きしだ
最近のJava事情
by
なおき きしだ
怖いコードの話 2018/7/18
by
なおき きしだ
Java新機能観察日記 - JJUGナイトセミナー
by
なおき きしだ
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
by
なおき きしだ
これからのコンピューティングの変化とこれからのプログラミング at 広島
by
なおき きしだ
Summary of JDK10 and What will come into JDK11
by
なおき きしだ
Summary of JDK10 and What will come into JDK11
by
なおき きしだ
Java10 and Java11 at JJUG CCC 2018 Spr
by
なおき きしだ
New thing in JDK10 even that scala-er should know
by
なおき きしだ
Java Release Model (on Scala Matsuri)
by
なおき きしだ
これからのJava言語と実行環境
by
なおき きしだ
乱数のたのしい話
by
なおき きしだ
JavaOne2015報告またはこれからのJava
by
なおき きしだ
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
by
なおき きしだ
機械学習プロ生20151121
by
なおき きしだ
Javaプログラミング入門
1.
Java プログラミング入門 2016/5/21 きしだ
なおき JJUG CCC 2016 Spring
2.
自己紹介 ● きしだです。 ● 聖闘士星矢をみはじめた –
そろそろ白銀聖闘士が出てくる
3.
今日の話 ● × Java(の)プログラミング入門 ●
○ Java(で)プログラミング入門
4.
Javaでプログラミング入門 ● Javaを使ってプログラミングの入門 ● なるべくJava以外でも使える話をします
5.
おわび ● 「Javaプログラミングというからには、Java でのプログラムの組み方そのものの勉強もやっ ておいたほうがいいのではないかと思いま す。」
6.
おわび ● 「このセッションでは、改めてJavaの文法に立 ち戻って、Javaの値や条件分岐、メソッド、型 などを見直し、どのようにプログラムを組み上 げていくかプログラムとは何かということを考 えていきたいと思います。」
7.
Javaでプログラミング入門 ● Javaで、プログラムとは何かの入門
8.
プログラムとは ● 値の関係 +
状態遷移 + 入出力
9.
値の関係 ● 値の構造 ● 操作 –
計算式とか ● 型
10.
状態遷移 ● 処理するデータと現在の状態から、次の状態を 決める ● プログラムの状態 –
変数の保持する値
11.
入出力 ● 画面に出力 ● キーボードから入力 ●
ネットワークへ出力(送信) ● ネットワークから入力(受信) ● ディスクへ出力(保存) ● ディスクから入力(読込み)
12.
今日の話 ● 値の構造 ● 操作 –
計算式とか ● 型
13.
プログラムでの値 ● 単純な値を組み合わせて複雑な値を表現 ● 構造がある
14.
一番単純な値 ● 電気のon/offの組み合わせで表せる値 ● ブール代数 –
true/false – 1/0 →2進数
15.
コンピュータで表せる関係 ● 電気のon/offの組み合わせで表せる関係 ● 論理演算
16.
論理演算 ● and ● or ●
xor ● not
17.
and ● かつ ● 論理積 ●
両方trueのときtrue ● & A B A and B 1 1 1 1 0 0 0 1 0 0 0 0
18.
or ● または ● 論理和 ●
どっちかtrueのときtrue ● | A B A or B 1 1 1 1 0 1 0 1 1 0 0 0
19.
xor ● 排他的論理和 ● どっちかだけtrueのときtrue ●
^ A B A xor B 1 1 0 1 0 1 0 1 1 0 0 0
20.
日常生活での「または」 ● 「オニギリまたはサンドイッチを 取ってください」 ● 「オニギリorサンドイッチを 取ってください?」 ●
両方取ってもOK?
21.
日常生活での「または」 ● 「オニギリまたはサンドイッチを 取ってください」 ● 両方取るとNG ●
「オニギリxorサンドイッチを 取ってください」
22.
not ● 否定 A not
A 1 0 0 1
23.
2進数 ● 0:false 1:trueとして扱う ●
左からn桁目は2^(n-1) ● 8ビットなら128-64-32-16-8-4-2-1 ● 233=0b11101001 ● 128+64+32+8+1=233
24.
2進数の演算 ● ビット演算 ● シフト
25.
ビット演算の使い方 ● リセット:全部0にする ● OFF:一部を0にする ●
ON:一部を1にする ● TOGGLE:一部を反転する
26.
リセット:全部0にする ● xor – AとBが同じとき0になる ●
元の値でxorをとると0になる ● 昔のCPUでレジスタを0にするとき使われた A B A xor B 1 1 0 0 1 1 1 0 1 0 0 0
27.
OFF:一部を0にする ● and – Bが1のときAの値はそのまま残る –
Bが0のときAの値にかかわらず0になる ● OFFにしたいところを0にした値でandをとる A B A and B 1 1 1 0 1 0 1 0 0 0 0 0
28.
ON:一部を1にする ● or – Bが0のときAの値はそのまま残る –
Bが1のときAの値にかかわらず1になる ● ONにしたいところを1にした値でorをとる A B A or B 1 1 1 0 1 1 1 0 1 0 0 0
29.
TOGGLE:一部を反転する ● xor – Bが0のときAの値はそのまま残る –
Bが1のときAの値は反転する ● 反転したいところを1にした値でxorをとる A B A xor B 1 1 0 0 1 1 1 0 1 0 0 0
30.
2進数のシフト ● シフト – ずらす ●
左にシフト ● 右にシフト
31.
n進数について ● n倍すると左にずれる – 左にずらすとn倍になる –
10進数で123を10倍すると1230になる ● 1/n倍すると右にずれる – 右にずらすと1/n倍になる – 10進数で123を1/10倍すると12.3になる
32.
2進数のシフト ● 左にシフトすると2倍になる ● 右にシフトすると1/2になる
33.
整数をあらわす ● 何ビット使うか – int:
32ビット – long: 64ビット ● 負の数を表せるかどうか – 表さない→符号なし整数→Javaにはない – 表す→符号付整数
34.
負の数を表す ● 2の補数 ● もうひとけた多いと仮定して引き算する ●
3桁の10進数の場合 – 32 – 53 = -21 ● 1032 - 53 = 979
35.
整数の関係 ● 足し算 ● 引き算 ●
掛け算 ● 割り算
36.
足し算を論理演算で行う A B A
+ B 1 1 10 1 0 1 0 1 1 0 0 0 ● 1ビットの足し算
37.
足し算を論理演算で行う A B 1桁目 1
1 0 1 0 1 0 1 1 0 0 0 ● 1桁目を見てみる ● xorだ!
38.
足し算を論理演算で行う A B 繰上り 1
1 1 1 0 0 0 1 0 0 0 0 ● 繰上りをみてみる ● andだ! ● 1ビット左にシフトする
39.
足し算を論理演算で行う ● xorとandとシフトでできる
40.
足し算ができれば あとの計算もできる ● 引き算 – マイナスの数を足す ●
掛け算 – 掛ける数だけループして足し算 – 筆算 ● 割り算 – 割る数が何回引けるか数える – 筆算
41.
実数はどう扱うか ● どこかを小数点とする→固定小数 – 例:1000倍して整数であらわす ●
3.14159->314159 ● 指数を別にあらわす→浮動小数 – Javaはこれ
42.
文字 ● 文字に数字をふる – 'a'
-> 97 – '0' -> 34
43.
文字セットと文字コード ● 文字セット – 文字を集めて番号をふる –
JIS – UNICODE ● 文字コード – 文字セットの番号をコンピュータで表現できる形式にする – Shift_JIS – UTF-8/UTF-16
44.
いろんな値を扱える ● 数は扱える ● 文字も扱える ●
もっといろんな値を扱いたい ● もっといろんな型の値を扱いたい
45.
もっといろんな値を扱いたい ● もっといろんな型の値を扱いたい
46.
値の型 ● Javaは型を扱う ● いろいろな種類の型がある
47.
Javaの型の種類 ● 型システム入門(TAPL)をベースにした分類 – 基本型 –
リスト – レコード – 関数型 – Union – Null – 総称型
48.
基本型 ● 構造を持たない単純な値の集合 ● Javaの基本型 –
8つ言えますね?
49.
リスト ● 同じ型の値を複数扱う ● 配列 –
int[] a・・・intの値を複数扱う
50.
レコード ● 異なる型の値を名前をつけて複数扱う ● (String
x int)、 ● Javaの場合は名前をつける必要がある ● クラス・インタフェース ● class A{int p; String q;}と class B{int p; String q;}は別物
51.
関数型 ● 関数の引数と戻り値の型を定義 ● Javaでは型として扱えない –
FunctionalInterfaceを使う ● 値としては扱える – メソッド参照 ● Integer::parseInt – ラムダ式 ● n -> Integer.parseInt(n)
52.
Union(積和型) ● 複数の型をとる ● String|Date –
文字列か日付 ● Javaでは一般には使えない
53.
UnionはJavaでは一般には使えない ● 「一般に」 – すべての場合に ●
「一般には使えない」 – すべての場合には使えない – 一部では使える?
54.
JavaでのUnion ● try { hoge(); }catch
(NumberFormatException|NullPointerException ex) { log(“困るよ~”); } ● マルチキャッチはUnion型
55.
null ● 型としてはあらわせない(暗黙の型) ● すべての型のサブタイプとして扱える ●
すべて可能 – String s = null; Integer i = null; LocalDateTime = null;
56.
多相性 ● 「プログラムの一部分を、異なる文脈では異な る型として用いることを可能にする各種の言語 機構」 ● 「一つのコードを複数の型で扱えるようにした 型システム」
57.
多相性の分類 ● パラメータ多相 ● アドホック多相 ●
部分型多相
58.
パラメータ多相 ● 型にパラメータを指定できる ● List<T> –
T = String – List<String>
59.
部分型多相 ● サブセットを扱う ● 属性はふえる –
{String, int, boolean}は{String, int}
60.
Javaの部分型 ● 名前が必要 ● 部分型関係を決めておく必要がある –
class A extends B ● 構造が同じでも、定義時に指定された 部分型関係がなければ、同一に扱えない – Scalaでは構造的部分型として、構造に同じ部分が あれば部分型として扱える仕組みがある。
61.
アドホック多相 ● 「多相的な値が異なる型として「見られる」と き、異なったように振る舞うことを可能に する」(TAPL) ● オーバーロード(静的型解決) ●
動的型解決
62.
オーバーロード ● 実際に呼び出されるメソッドが変わる ● コンパイル時に解決される –
静的ディスパッチ void hoge(Object o) { } void hoge(String s) { } void main() { String s = “こんにちは”; Object o = s; hoge (o); }
63.
Javaでの動的型解決 ● 例外のcatch ● try { Exception
ex = new NullPointerException(); throw ex; } catch (NullPointerException ex) { } catch (Exception ex) { }
64.
型がなんで大事か
65.
こういうときどうしますか? ● Hoge型の値をもっている ● こんなメソッドがある –
Foo getFoo(Hoge h); – Bar createBar(Foo f); ● こんなメソッドを作りたい – Bar toBar(Hoge h);
66.
こう ● Bar toBar(Hoge
h) { Foo f = getFoo(h); Bar b = createBar(f); return b; }
67.
簡単に表現 ● Function<Hoge, Bar>
some( Function<Hoge, Foo> f1, Function<Foo, Bar> f2) は実装できるか?
68.
こうなる ● Function<Hoge, Bar> some( Function<Hoge,
Foo> f1, Function<Foo, Bar> f2) { return Hoge h -> f2.apply(f1.apply(h)); }
69.
これは実装できる? ● Function<Hoge, Bar>
some( Function<Hoge, Foo> f1, Function<Bar, Foo> f2) は実装できるか?
70.
こうなる ● Function<Hoge, Bar>
some( Function<Hoge, Foo> f1, Function<Bar, Foo> f2) は他の関数が与えられないと実装できない
71.
ところで、これ正しいですか? ● 前提 – サバならば魚 –
魚ならば泳ぐ ● 結論 – サバならば泳ぐ
72.
じゃあ、これは? ● 前提 – イルカならば泳ぐ –
魚ならば泳ぐ ● 結論 – イルカならば魚
73.
証明方法 ● 命題 – 前提 ●
サバならば魚 ● 魚ならば泳ぐ – 結論 ● サバならば泳ぐ ● 「ならば(⇒)」という論理演算の導入 ● 命題を記号化する ● 命題を式であらわす
74.
「ならば(⇒)」という 論理演算の導入 ● ならば(⇒) ● Aがtrueのとき、Bがfalseだったらだめ ●
Aがfalseのときはtrue? A B A B⇒ 1 1 1 1 0 0 0 1 1 0 0 1
75.
「ならば(⇒)」 ● 命題:「きしだ」ならば「前日までに資料できてない」 ● 「きしだ」であり「前日までに資料できてない」とき – true ● 「きしだ」であり「前日までに資料できている」とき – false→なにかおかしい ● 「きしだ」じゃないとき 「前日までに資料できてない」でも 「前日までに資料できてる」でも true A
B A B⇒ 1 1 1 1 0 0 0 1 1 0 0 1
76.
命題を記号化する ● 命題 – 前提 ●
サバならば魚 ● 魚ならば泳ぐ – 結論 ● サバならば泳ぐ ● サバ -> A, 魚-> B, 泳ぐ -> C
77.
こうなる ● 前提 – AならばB –
BならばC ● 結論 – AならばC
78.
命題を式であらわす ● 命題 – 前提 ●
AならばB ● BならばC – 結論 ● AならばC ● 前提はandで結ぶ ● 前提と結論は「ならば⇒」で結ぶ
79.
こうなる ● ((A⇒B)and(B⇒C))⇒(A⇒C)
80.
証明 ● 前提=P, 結論=Rで表す ●
A, B, Cの各値の組み合わせについて P⇒Rはどうなるか
81.
証明 ● ((A⇒B)and(B⇒C))⇒(A⇒C) ● P⇒Rがすべて真 ●
恒真式。常になりたつ A B C A B⇒ B C⇒ (A B)and(B C)⇒ ⇒ :P A C⇒ :R P R⇒ 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 0 1 0 1 0 1 1 1 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 0 0 1 1 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 A B A B⇒ 1 1 1 1 0 0 0 1 1 0 0 1
82.
証明 ● ((A⇒B)and(C⇒B))⇒(A⇒C) ● P⇒Rがすべて真ではない ●
恒真式ではない。なりたたないことがある A B C A B⇒ C B⇒ (A B)and(C B)⇒ ⇒ :P A C⇒ :R P R⇒ 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1 0 1 0 0 0 1 1 1 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 0 1 1 0 0 1 1 0 0 0 1 1 1 1 1 A B A B⇒ 1 1 1 1 0 0 0 1 1 0 0 1
83.
似てないですか? ● 実装できる – Function<Hoge,
Bar> some( Function<Hoge, Foo> f1, Function<Foo, Bar> f2) ● 正しい – 前提 ● サバならば魚 ● 魚ならば泳ぐ – 結論 ● サバならば泳ぐ
84.
Functionを「ならば」とおく ● 論理の命題 – 前提 ●
サバならば魚 ● 魚ならば泳ぐ – 結論 ● サバならば泳ぐ ● 関数 – ならば<サバ, 泳ぐ> some( ならば<サバ, 魚> f1, ならば<魚, 泳ぐ> f2)
85.
完全に一致 ● ならば<サバ, 泳ぐ>
some(ならば<サバ, 魚> f1, ならば<魚, 泳 ぐ> f2) ● 変換 – ならば→Function – サバ→Hoge – 魚→Foo – 泳ぐ→Bar ● Function<Hoge, Bar> some( Function<Hoge, Foo> f1, Function<Foo, Bar> f2)
86.
正しくない推論は ● 命題 – 前提 ●
イルカならば泳ぐ ● 魚ならば泳ぐ – 結論 ● イルカならば魚 ● 関数 – ならば<イルカ, 泳ぐ> some( ならば<イルカ, 泳ぐ> f1, ならば<魚, 泳ぐ> f2)
87.
実装できない ● ならば<イルカ, 泳ぐ>
some(ならば<イルカ, 泳ぐ> f1, ならば< 魚, 泳ぐ> f2) ● 変換 – ならば→Function – イルカ→Hoge – 魚→Foo – 泳ぐ→Bar ● Function<Hoge, Bar> some( Function<Hoge, Bar> f1, Function<Foo, Bar> f2)
88.
どういうことなの ● 関数と型を論理の命題に対応づけることが できる
89.
だからどういうことなの ● 関数と型によってコンパイルが通るプログラム を書くことは、対応する論理の命題を 証明することになる
90.
ようするになんなの ● 型をつかってプログラムを書いていると 思ったら論理の証明をしていた
91.
カリー=ハワード同型対応 ● カリーさんとハワードさんがみつけた ● プログラムと論理命題が対応するという不思議な関係 ●
ならば(⇒) – 関数 ● and – 複数の引数 ● or – Union
92.
orをJavaでどうやろう? ● JavaにはUnionがない ● 「卵が安い」または「冷蔵庫に卵がない」 ならば「卵を買う」 ●
卵を買う some( 卵が安い | 冷蔵庫に卵がない a)
93.
オーバーロード(アドホック多相) ● 「卵が安い」または「冷蔵庫に卵がない」 ならば「卵を買う」 ● オーバーロードで表現 –
卵を買う some(卵が安い a) – 卵を買う some(冷蔵庫に卵がない a) ● 戻り値にORを使えない – 傘 | 休む some(雨が降る a)
94.
継承を使う(部分型多相) ● 「卵が安い」または「冷蔵庫に卵がない」 ならば「卵を買う」 ● 型を定義 –
interface 卵条件{} – interface 卵が安い extends 卵条件{} – interface 冷蔵庫に卵がない extends 卵条件{} – 卵を買う some(卵条件 a) ● 戻り値にも使える
95.
型の重要性 ● 型が高機能だとさまざまな論理が 証明しやすくなる ● 正しく動くプログラムが書きやすくなる
96.
今日のまとめ ● 値を組み合わせれればいろんな値が扱える ● いろんな値は型として表す ●
型を組み合わせるといろんな型が実現できる ● Javaにも案外いろんな型がある ● 型を考えることで、正しく動くプログラムを 考えることになる
97.
Javaプログラミング再入門 ● プログラムを考えることに入門 できたでしょうか ● 門の入り口まで来れたでしょうか ●
門があること、がイメージできればうれしい
Download