About Cosense
Help
Log in
Aumy
メ
ソ
ッ
ド
関
数
、
手
続
き
に
似
た
概
念
、
あ
る
い
は
そ
れ
ら
の
一
種
オ
ブ
ジ
ェ
ク
ト
指
向
言
語
で
は
関
数
で
は
な
く
メ
ソ
ッ
ド
だ
け
が
存
在
す
る
こ
と
も
あ
る
オ
ブ
ジ
ェ
ク
ト
に
属
す
る
関
数
の
こ
と
を
メ
ソ
ッ
ド
と
呼
ぶ
こ
と
が
多
い
特
に
オ
ブ
ジ
ェ
ク
ト
を
参
照
す
る
も
の
メ
ソ
ッ
ド
呼
び
出
し
は
だ
い
た
い
f
o
o
.
m
e
t
h
o
d
(
)
み
た
い
な
形
に
な
る
C
O
O
P
機
能
が
な
い
の
で
メ
ソ
ッ
ド
も
な
い
H
a
s
k
e
l
l
O
O
P
的
な
関
数
は
な
い
型
ク
ラ
ス
を
特
徴
づ
け
る
関
数
の
こ
と
を
メ
ソ
ッ
ド
と
よ
ぶ
こ
と
が
あ
る
気
が
す
る
J
a
v
a
け
っ
こ
う
最
近
ま
で
す
べ
て
の
メ
ソ
ッ
ド
は
何
ら
か
の
ク
ラ
ス
(
オ
ブ
ジ
ェ
ク
ト
か
も
)
に
属
し
て
い
た
ラ
ム
ダ
式
が
入
る
ま
で
は
関
数
な
か
っ
た
の
か
な
R
u
b
y
関
数
が
な
い
ト
ッ
プ
レ
ベ
ル
に
書
く
と
グ
ロ
ー
バ
ル
オ
ブ
ジ
ェ
ク
ト
(
こ
れ
で
よ
び
か
た
あ
っ
て
る
?
)
に
属
す
る
J
a
v
a
S
c
r
i
p
t
関
数
が
ま
ず
あ
り
、
オ
ブ
ジ
ェ
ク
ト
に
突
き
刺
さ
っ
た
関
数
の
こ
と
を
メ
ソ
ッ
ド
と
よ
ぶ
S
c
a
l
a
オ
ブ
ジ
ェ
ク
ト
が
ま
ず
あ
り
、
.
a
p
p
l
y
メ
ソ
ッ
ド
を
も
つ
オ
ブ
ジ
ェ
ク
ト
が
関
数
(
の
よ
う
に
適
用
で
き
る
)
メ
ソ
ッ
ド
は
関
数
で
は
な
い
aumy
S
c
a
l
a
の
ア
プ
ロ
ー
チ
と
J
a
v
a
S
c
r
i
p
t
の
ア
プ
ロ
ー
チ
を
合
わ
せ
よ
う
と
す
る
と
無
限
後
退
す
る
ぞ
(
1
敗
)
Related
Sort by
Related
Modified
Created
Last visited
Most linked
Page rank
Title
Links
オブジェクト
en: object単に「物体」であったり、特に「対象物」を意味したりするSVOのO、目的語とか値というのは操作 ([関数] ないし [手続き]) の対象[Java]などでは[プリミティブ]と対比される[複合型]のことを示すこともあり、オブジェクトは常に参照の形であるというような特徴があったり
関数
function[C言語]などにおいては、値を返しうる[手続き]のこと関数を呼び出す、と言うことが多い[関数型言語] においては第1級の値([第一級関数])であり、値を受け取って値を返すもの関数を値に適用する、と言うことが多い
手続き
procedureプロシージャ一連の処理の塊[サブルーチン] という呼び方もあるC言語などにおける[関数]に近い
型クラス
ある[型]で何ができるかを示すもの[インターフェース]に近い`class Show a where``show :: a -> String``Show` 型クラスのインスタンスである型は `show :: a -> String` を実装する必要がある
関数とメソッドの関係
[関数]と[メソッド]は概念として非常に近いが、その関係は言語によってさまざま関数とメソッドが別ものオブジェクト指向だとメソッドしかないことはよくあるクラスの中にしかメソッドが書けなかったり関数型だと関数しかないことはめちゃくちゃある
Ruby
日本発の[プログラミング言語][オブジェクト指向]で[動的型付け]な[スクリプト言語]日本発で日本語ドキュメントが豊富なのもあり、多くの日本製ソフトウェアの開発や自動化スクリプトで使われる[Homebrew] でも使われている外観
既存の型への拡張メソッド
[F#]において既存の[型]に追加で[メソッド]を生やすことができるRubyの[オープンクラス]に近いが、より治安が維持しやすいよう設計されている各ファイルは[モジュール]という単位で区切られていて、あるモジュール内で行われたメソッドの拡張はその[open/glob import]をしない限り有効にならない依存モジュールの依存モジュールの依存モジュールが生やしたメソッドが勝手に有効になっている、というようなことはない
関数
関数型言語
[関数型プログラミング] がやりやすい言語[第一級関数] を使い、[関数]が引数に関数を取ったり、関数を返したりするような手法でのプログラミングをしやすい言語[型システム]が強力であることが多い
スタックメモリ
[関数]のローカル変数を保存するためのメモリ領域[スコープ]に依存するスコープを抜けると自動的に破棄される
ヒープメモリ
[関数]の[スコープ]に依存しないような[メモリ]を動的に確保するためのメモリ領域
無名関数
名前のない[関数]性質上、必ず[式]である[ラムダ式] と呼ばれることもある[アロー関数]とかもそう
関数適用
特に[関数型言語]や[ラムダ計算]において[関数]の呼び出しを適用(application)と呼ぶことがある
純粋関数
暗黙の入出力がない[関数]明示的な入力…関数の引数暗黙の入力…現在時刻やグローバル変数など外部の状態によって出力が変化しうる。[参照透過]でない明示的な出力…関数の返り値暗黙の出力…標準出力への書き込みや変数への再代入、値の書き換えなどが行われる。[副作用] がある
オブジェクト指向言語
クラス
class[オブジェクト指向言語] によくある機能型と、それを利用する関数をまとめて定義する型に密結合したモジュール[** [JavaScript]]
オブジェクト
直積型
[代数的データ型] を構成する型のひとつ複数の値を組み合わせた値[タプル][構造体][レコード]
型クラス
型コンストラクタ
Javaとかで `Array` っていうのは[型]ではない`Array<int>` のようにしてはじめて型として扱える引数を必要とする特殊な型 (ジェネリック型) だといわれたらアレだが[Haskell]や[PureScript]では `List Int` は、`List` という[* 型コンストラクタ]に`Int`型を突っ込んだ結果得られる型を表す`Int` 型と書いたけど `Int` 型コンストラクタと見てもいいんだよな確か
関数型プログラミング
FP (functional programming)日本語ではなぜか関数プログラミングと書くこともある[第一級関数] を活用し、関数が関数を取ったり関数を返したりするようなプログラミング手法[関数型言語]でやるのがいいが、そうでなくてもやればできることがある[fp-ts]
1から始めるJuliaプログラミング
#読みかけの本[Julia]1.型オプショナルな型宣言
PureScript
#プログラミング言語 #純粋関数型言語 #AltJShttps://www.purescript.org/[JavaScript] にコンパイルされる純粋関数型言語基本はかなり [Haskell]`f x` スタイルの関数適用
やりたいプログラミング言語
プログラミング言語を学んで言語機能を比較するのがとても楽しい。[Ruby]純粋オブジェクト指向と言われる言語はどういうものなのか?同じようにオブジェクト指向が強い動的型付け言語の[JavaScript]とはどのように違う?オブジェクト指向の原義であるメッセージパッシングを尊重されてるみたいな話を聞くけどなんで?
アドホック多相
異なる型の引数に適用でき、引数の型に応じて個別の実装に切り替わる(dispatchされる)関数「異なる型」というのは部分型関係すらもないという意味そもそもHaskellやRustには部分型がないこの点で[サブタイピング多相]とは異なるad-hoc polymorphism
Haskell
トレイト
[Rust] などの機能型を分類するやつ[型クラス] と何が違う?Rustではほぼ型クラス
高カインド型
higher kinded types (HKT)博多?高力(ちから)インド型ではないプログラミングで最も基本にあるのは[[値]]である`1` `"hello"` `true` `(1, true)`
Created
3 years ago
by
おーみー
Updated
2 years ago
by
おーみー
Views: 11
Page rank: 8.4
Copy link
Copy readable link
Start presentation
Hide dots
メソッド
関数
、
手続き
に似た概念、あるいはそれらの一種
オブジェクト指向言語
では関数ではなくメソッドだけが存在することもある
オブジェクト
に属する関数のことをメソッドと呼ぶことが多い
特にオブジェクトを参照するもの
メソッド呼び出しはだいたい
foo.method()
みたいな形になる
C
OOP機能がないのでメソッドもない
Haskell
OOP的な関数はない
型クラス
を特徴づける関数のことをメソッドとよぶことがある気がする
Java
けっこう最近まですべてのメソッドは何らかのクラス (オブジェクトかも) に属していた
ラムダ式が入るまでは関数なかったのかな
Ruby
関数がない
トップレベルに書くとグローバルオブジェクト (これでよびかたあってる?) に属する
JavaScript
関数がまずあり、オブジェクトに突き刺さった関数のことをメソッドとよぶ
Scala
オブジェクトがまずあり、
.apply
メソッドをもつオブジェクトが関数 (のように適用できる)
メソッドは関数ではない
aumy.icon
ScalaのアプローチとJavaScriptのアプローチを合わせようとすると無限後退するぞ (1敗)