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
EN
Uploaded by
Yutaka Imamura
646 views
かたのはなし
static typedの恩恵についての主張。Haskell布教資料。
Software
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 22
2
/ 22
3
/ 22
4
/ 22
5
/ 22
6
/ 22
7
/ 22
8
/ 22
9
/ 22
10
/ 22
11
/ 22
12
/ 22
13
/ 22
14
/ 22
15
/ 22
16
/ 22
17
/ 22
18
/ 22
19
/ 22
20
/ 22
21
/ 22
22
/ 22
More Related Content
PDF
希望の関数と絶望の副作用
by
parrotstudio
PDF
Technical report for IPv6 Routing w/ bgp4+
by
Toshiki Tsuboi
PDF
Technical report for IPv6 Routing w/ bgp4+ (part2)
by
Toshiki Tsuboi
PPTX
「型の理論」と証明支援システム -- COQの世界
by
maruyama097
PPTX
擬人化で考えるオブジェクト指向
by
yamada28go
PDF
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
by
parrotstudio
PPTX
インターフェイスによるオブジェクト指向設計
by
Akineko Shimizu
PDF
たのしい高階関数
by
Shinichi Kozake
希望の関数と絶望の副作用
by
parrotstudio
Technical report for IPv6 Routing w/ bgp4+
by
Toshiki Tsuboi
Technical report for IPv6 Routing w/ bgp4+ (part2)
by
Toshiki Tsuboi
「型の理論」と証明支援システム -- COQの世界
by
maruyama097
擬人化で考えるオブジェクト指向
by
yamada28go
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
by
parrotstudio
インターフェイスによるオブジェクト指向設計
by
Akineko Shimizu
たのしい高階関数
by
Shinichi Kozake
Viewers also liked
PDF
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
by
Masahiro Wakame
PDF
良質なコードを高速に書くコツ
by
Shunji Konishi
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
PDF
オブジェクト指向できていますか?
by
Moriharu Ohzu
PPTX
オブジェクト指向設計の原則
by
Toru Koido
PDF
オブジェクト指向の設計と実装の学び方のコツ
by
増田 亨
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
by
Masahiro Wakame
良質なコードを高速に書くコツ
by
Shunji Konishi
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
オブジェクト指向できていますか?
by
Moriharu Ohzu
オブジェクト指向設計の原則
by
Toru Koido
オブジェクト指向の設計と実装の学び方のコツ
by
増田 亨
Similar to かたのはなし
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
by
Hiromi Ishii
PDF
型! 型!
by
真一 北原
PDF
すごいHaskell読書会
by
Kosuke Usami
PDF
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
by
Nozomu Kaneko
PDF
Python と型ヒント (Type Hints)
by
Tetsuya Morimoto
PDF
TypeScript & 関数型講座 第2回 TypeScript という言語
by
gypsygypsy
PDF
すごいH 第12章モノイド
by
Shinta Hatatani
PDF
【書籍紹介】型システム入門
by
株式会社ランチェスター
PDF
Haskell勉強会2 in ie
by
maeken2010
PDF
型!
by
真一 北原
PDF
すごいHaskell読書会 in 大阪 #6
by
cojna
PDF
型超ざっくり入門@ハンズラボ社内勉強会
by
Yusuke Usui
PDF
TAPL 勉強会(紹介編)
by
none_toka
PDF
Scalaで型クラス入門
by
Makoto Fukuhara
PDF
TypeScript & 関数型講座 第1回 型の重要性
by
gypsygypsy
PPTX
OUCC LT会2
by
Ryuichi ITO
PDF
すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)
by
Nozomu Kaneko
PPT
言語処理系入門7
by
Kenta Hattori
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
by
Hiromi Ishii
型! 型!
by
真一 北原
すごいHaskell読書会
by
Kosuke Usami
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
by
Nozomu Kaneko
Python と型ヒント (Type Hints)
by
Tetsuya Morimoto
TypeScript & 関数型講座 第2回 TypeScript という言語
by
gypsygypsy
すごいH 第12章モノイド
by
Shinta Hatatani
【書籍紹介】型システム入門
by
株式会社ランチェスター
Haskell勉強会2 in ie
by
maeken2010
型!
by
真一 北原
すごいHaskell読書会 in 大阪 #6
by
cojna
型超ざっくり入門@ハンズラボ社内勉強会
by
Yusuke Usui
TAPL 勉強会(紹介編)
by
none_toka
Scalaで型クラス入門
by
Makoto Fukuhara
TypeScript & 関数型講座 第1回 型の重要性
by
gypsygypsy
OUCC LT会2
by
Ryuichi ITO
すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)
by
Nozomu Kaneko
言語処理系入門7
by
Kenta Hattori
かたのはなし
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