Submit Search
Upload
かたのはなし
•
0 likes
•
642 views
Yutaka Imamura
Follow
static typedの恩恵についての主張。Haskell布教資料。
Read less
Read more
Software
Report
Share
Report
Share
1 of 22
Download now
Download to read offline
Recommended
希望の関数と絶望の副作用
希望の関数と絶望の副作用
parrotstudio
Technical report for IPv6 Routing w/ bgp4+
Technical report for IPv6 Routing w/ bgp4+
Toshiki Tsuboi
Technical report for IPv6 Routing w/ bgp4+ (part2)
Technical report for IPv6 Routing w/ bgp4+ (part2)
Toshiki Tsuboi
「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界
maruyama097
擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向
yamada28go
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
parrotstudio
インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計
Akineko Shimizu
たのしい高階関数
たのしい高階関数
Shinichi Kozake
Recommended
希望の関数と絶望の副作用
希望の関数と絶望の副作用
parrotstudio
Technical report for IPv6 Routing w/ bgp4+
Technical report for IPv6 Routing w/ bgp4+
Toshiki Tsuboi
Technical report for IPv6 Routing w/ bgp4+ (part2)
Technical report for IPv6 Routing w/ bgp4+ (part2)
Toshiki Tsuboi
「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界
maruyama097
擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向
yamada28go
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
parrotstudio
インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計
Akineko Shimizu
たのしい高階関数
たのしい高階関数
Shinichi Kozake
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Masahiro Wakame
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
Shunji Konishi
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
オブジェクト指向設計の原則
オブジェクト指向設計の原則
Toru Koido
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
[CE81] プログラミング入門教育用学習環境PEN
[CE81] プログラミング入門教育用学習環境PEN
Ryota Nakamura
Japanese for it bridge engineers
Japanese for it bridge engineers
Vu Hung Nguyen
TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)
none_toka
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
TAPL勉強会 第1章 (2012-07-17)
TAPL勉強会 第1章 (2012-07-17)
none_toka
TypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdf
Ryo Higashigawa
みんなのPython勉強会#62
みんなのPython勉強会#62
hiroya akita
大人の基礎C#【Niigat.NET 2015-10】
大人の基礎C#【Niigat.NET 2015-10】
Mitsuhito Ishino
More Related Content
Viewers also liked
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Masahiro Wakame
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
Shunji Konishi
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
オブジェクト指向設計の原則
オブジェクト指向設計の原則
Toru Koido
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
Viewers also liked
(6)
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
オブジェクト指向できていますか?
オブジェクト指向できていますか?
オブジェクト指向設計の原則
オブジェクト指向設計の原則
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
Similar to かたのはなし
[CE81] プログラミング入門教育用学習環境PEN
[CE81] プログラミング入門教育用学習環境PEN
Ryota Nakamura
Japanese for it bridge engineers
Japanese for it bridge engineers
Vu Hung Nguyen
TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)
none_toka
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
TAPL勉強会 第1章 (2012-07-17)
TAPL勉強会 第1章 (2012-07-17)
none_toka
TypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdf
Ryo Higashigawa
みんなのPython勉強会#62
みんなのPython勉強会#62
hiroya akita
大人の基礎C#【Niigat.NET 2015-10】
大人の基礎C#【Niigat.NET 2015-10】
Mitsuhito Ishino
Similar to かたのはなし
(8)
[CE81] プログラミング入門教育用学習環境PEN
[CE81] プログラミング入門教育用学習環境PEN
Japanese for it bridge engineers
Japanese for it bridge engineers
TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)
メタプログラミングって何だろう
メタプログラミングって何だろう
TAPL勉強会 第1章 (2012-07-17)
TAPL勉強会 第1章 (2012-07-17)
TypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdf
みんなのPython勉強会#62
みんなのPython勉強会#62
大人の基礎C#【Niigat.NET 2015-10】
大人の基礎C#【Niigat.NET 2015-10】
かたのはなし
1.
かたのはなし 2014-12-2 IMAMURA YUTAKA
2.
TABLE OF CONTENTS 1.
主張 2. 型について 3. 型のあるコード、型のないコード 4. まとめ
3.
型はドキュメント である 主張
4.
一般的にそう考えられているらしい 型はプログラムを読む際にも有用である。手続きの先頭やモジュール インターフェイスの型宣言 はある種のドキュメントを構成し、振る舞い を理解する有用なヒントになる。さらに、コンパイラ が実行されるたび に検査されるので、コメント中に埋め込まれた記述とは違ってこのド キュメント
は古くなることがない。型の役割は、モジュールのシグネ チャにおいて特に重要である。 ー 型システム入門 プログラミング言語と型の理論, Benjamin C. Pierce
5.
型はドキュメント、とは → 型(Type) ドキュメント(Document)
6.
型はドキュメント、とは 型が表す情報はとても多いです。 プログラムに記述された型注釈をみると、そのプログラムの性質を把 握することもできます。 型はプログラムの性質を説明していると言えます。 コメントなどのドキュメントもまたプログラムの性質を説明します。 だから、型はドキュメントとしての役割もこなしている といえます。
7.
型について
8.
型とは 形のないものから、形を切り出すのが「型」 String “これは文字列です” × × = = ごちゃごちゃしたバイナリデータも Stringという型を与えると
文字列に変身
9.
型がなければ この辺がたぶん次の クッキーだと、思う そもそも何がどこにあって、何がどれなのか、整理できない 0〜80bit目が文字列 だったような。。。
10.
型はすでに使われている 私たちはプログラムを整理するために型を使っている。 String osName =“Windows”;
// データは文字だと解る Integer osVersion = 8; // データは数値だと解る 型が明示されなければ osName = 0x57696e646f7773 // データは文字なのか? osVersion = 0x8; // データは数値なのか? その変数(データ)が何を表しているのか、途端にわからなくなる。 文脈でその意味を推測できるかもしれない。できないかもしれない。
11.
言語によって型の扱いは違う • 型が明示されている場合 1. コード上で明確なデータ型の説明がされる 2.
その説明(つまり型)を常にコンパイラがチェックできる n これが「静的型付け言語」のポイント • 型が明示されていない場合 1. 変数の名前からデータの性質を推論する 2. 処理系が実行時に型をチェックする(動かすまでわからない) n これが「動的型付け言語」のポイント
12.
いくつかの 具体例 型のあるコード、型のないコード
13.
素数かどうかを調べる関数 • たとえば下記のような機能を持つ関数(メソッド)を考えてみる。 p 与えられた自然数が素数かどうかを判定する関数 • この関数について、 •
型注釈がない場合の書き方と • 型注釈がある場合の書き方 • を比べてみてみる。 • 素数とは • 1と自分自身以外では割り切れない数のこと • 1, 2, 3, 5, 7, 11, 13 ….
14.
型注釈のない定義(素朴なかんじ) 動的型付け言語であるJavascriptならこういう書き方になる。 この定義(宣言)について何が言える? • 素数の検査かな? • パラメータは数値かな? •
たぶんBoolean(真偽値)が返る? 名前から推測することで、その性質はなんとなく予測できそう。 function isPrime(num) まあ、素数の検査の関数かどうかは、 事前の情報が与えられていない場合、 コメントから読み解くしかないですが。
15.
型注釈のある定義 静的型付き言語であるJavaならこういう書き方になる。 この定義(宣言)について何が言える? • 素数の検査かな? • パラメータは数値
(キリッ • 返却値はboolean (キリッ 型注釈によって意味の曖昧な部分が減った。 キリッとした。 boolean isPrime(Number num) (`・ω・´)
16.
さらに定義を進化させる 問題は「与えられた自然数が素数かどうかを判定する関数」だったことを思い出そう。 この定義(宣言)について何が言える? • 素数の検査かな? • パラメータは自然数
(キリッ • 返却値はboolean (キリッ より問題を正確に記述できるようになった。 よりキリッとした。 // 自然数はNumber(数)に含まれるという定義 (便宜的) class 自然数 extends Number {} boolean isPrime(自然数 num) (`・ω・´)
17.
コンパイラによるチェック この関数の使い方について考えてみよう。 • この関数に自然数を入力するとどうなるだろうか? • この関数に負数を入力するとどうなるだろうか? boolean
isPrime(自然数 num) // さっき見た定義な 自然数 nat = 11; // これは自然数の素数のはず Integer negative = -11; // これは負の整数の素数のはず isPrime(nat) // true isPrime(negative) // コンパイルエラー 問題を正確に型で表現できると、しょうもないエラーはどんどんコンパ イラが見つけてくれるようになる。
18.
まとめ
19.
型が意味を説明してくれる 型による注釈を使うと、関数が何するためのものなのか、解りやすくなる。 型が意味を説明してくれる。 これがつまり「型はドキュメントである」ということ。 さらにコンパイラはそのドキュメントをいつもレビューしてくれる。 型をきちんと定義してプログラムを書けば、もっとコメントは減らせる。 その上読みやすいコードにもなっていく。
20.
もちろん動的型付けもいいよね JavascriptやPython、Rubyなどの動的型付け言語もいいと思いま す。 ただ、開発者が増えたり、コードが肥大化してくると、静的型付けを求 める傾向が散見されたりはしますが。。。 • Javascript: 静的型付けを持つAltJSの隆盛 •
Python: version 3くらいから型の注釈がオプションでついた
21.
結論 Haskellを使おう • 純粋関数型言語 • 高度な型システム •
圏論に基づく抽象化 • もちろん静的型付け
22.
おわり
Download now