お前らオブジェクト指向なんか真面目に信仰して勉強してもまともなプログラミングは書けないことについて☆(^~^)<書きかけ>

それより写像

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 疑似コードで説明しよう☆ 日付を出したいとするぜ☆」

Test:

Print Today

Output:

2019-09-16

KIFUWARABE_80x100x8_01_Futu.gif
「 プログラムを Test:Output: に分けて書くのは お父んの流行りか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 プログラムの親は数学で、数学がやる式の計算というのは写像なんで、写像を覚えろだぜ☆」

20190916comp1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 これを疑似コードで 当てはめると……☆」

20190916comp2.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 でも みんな だから何? って言って 飽きるのよ。
数学は もっと難しくて 理解しがたくて 複雑で 摩訶不思議で 掛け軸に飾るような精神論であってほしいのよ。
手に届かないものであってくれれば 今のままの自分で居られるから」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 現実より数学が難しかったら 誰が数学を使うんだぜ☆ 現実を使うに決まってんだろ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ次は 年は要らないとしよう☆ 月日だけ欲しくて、月/日 みたいに出したいとしよう☆」

Test:

$text <= Format "MM/DD" $(Today)
Print $today

Output:

09/16

KIFUWARABE_80x100x8_01_Futu.gif
「 コマンド・シンタックスだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 これを疑似コードで 当てはめると……☆」

20190916comp3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Formatが2変数関数 なのに比べ、 Printは1変数関数☆ それだけの違い☆
$text は分かりやすく説明するためだけに置いている 中間変数だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 例えば 次のように $text を省く式も考えられるぜ☆」

Test:

Print $(Format "MM/DD" $(Today))

Output:

09/16

20190916comp4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ただし これは 書き方を省いただけで、ステップは省けていない☆ どちらも同じだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 今日の日記を書くのに 1日かかっていたら 日記は半分しか書けないからな☆
書き方を省くことは 数学の本質だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ただ、プログラムを コマンド・シンタックスで書くことは稀だぜ☆ だいたい次のような感じになる☆」

Test:

Print( Format( "MM/DD",  Today() ) )

Output:

09/16

KIFUWARABE_80x100x8_01_Futu.gif
「 ファンクション・シンタックスだな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 丸かっこと カンマが増えて 目がチカチカするんだけど」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ 次のように書ければどうだろうか☆?」

Test:

Today.Format("MM/DD").Print()

Output:

09/16

KIFUWARABE_80x100x8_01_Futu.gif
「 ドット・シンタックスだな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 すっきりしたけど、なんで書き方には いろんな種類があるの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 最初は べつにシンプルでなければいけないほど 今の自分に困っていなかったが、
だんだん 困ってきて シンプルを目指し始めたんだろ☆」

20190916comp5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 出口、終値、戻り値、呼び方はいろいろだが 出口が複数個あるのもある☆
これらは Tuple(タプル)と呼ばれているのを見かけるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 タプル自体は ただの 名前なしリスト だけどな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ プログラム言語によって 使える機能、使えない機能 がマチマチなので、
プログラムを勉強するとは 何なのか、については 誰かが音頭を取れるようなものでも ないと思う☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 数学をやればいいのよ。算数でも 高校数学でも 大学数学でもなく、数学」

20190916comp6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 写像が 本当に便利になるのは Map(マップ) からだぜ……、というか、
写像を英語で言うと Mapping(マッピング)☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 だが この話は またヒマなときにする☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んは 初心者を叩いて回るスタイルだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 いや、今のうちに やってしまおう☆」

20190916comp7.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑こんな形の Map があれば……☆」

20190916comp7a1b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑結果も こんな感じになったり、都合により そうでなかったりする☆
詳しくは ドキュメント・コメントに だいたい書いてあるだろう☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 プログラム言語は 数学を元ネタ にして 用語を借りてくるから、数学やった方が早い☆」

20190916comp8.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 で、ここで 要素 の個数は 可変 にしておく☆
このマップは 入り口が5個、出口が5個 固定です、みたいなマップは 使いづらいからな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 こんな 要素の個数が多いマップ、もう 絵図にできないわね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 できる☆」

20190916comp9.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑こう描く☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どっかで見た図なんだけど!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 まとまり を扱う Map を考えればいい☆
というか、 まとまりを扱うのが Map、 写像 だぜ☆
このとき 数学の集合論では まとまりのことを Sets(集合)というが、プログラム言語では Collection (コレクション)と呼ぶ例がよくある☆」

20190916comp10.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 C言語などの プログラム言語では、この Map に当たる部分を function(関数) と呼んでいる☆
Map じゃないから 関数と呼ぶので合ってるんだが、 そのうち Map を使いたくなるんだぜ☆」

20190916comp11.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Domain(ドメイン)に当たる部分は Parameter(引数)
Domain じゃないから パラメーターと呼ぶので合ってるんだが、そのうち Domain を使いたくなるんだぜ☆」

20190916comp12.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Codomain(コドメイン)に当たる部分は Return(戻り値) と呼ぶ☆
Codomain じゃないから戻り値と呼ぶので合ってるんだが、そのうち Codomain を使いたくなるんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 昔のプログラムは 1ステップ ずつ書きたがる文法をしてるよな☆ ループ文書いたり。
Python だとむしろ map を使え、みたいな感じだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 機械がどう動いているか 人間が判断して 書いていくのが 機械寄りのプログラムだからな☆
人間寄りのプログラムがあっていいし、機械学習世代では 人間寄りのプログラムの書き方も必須だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 だが この話は またヒマなときにする☆」

ジェネリクス、ポリモーフィズム

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 昔のシンプルと 今のシンプルは違う☆ 例えば☆」

Test:

$apple as char = 0
Print $($apple + 1)

$banana as short = 127
Print $($banana + 1)

$cherry as int = 32767
Print $($cherry + 1)

$daikon as long = 2147483647
Print $($daikon + 1)

Output:

1
128
32768
2147483648

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 昔は変域を気にした☆
127に 1 を足したら -128 になってしまうかもしれないし、エラーで落ちるかもしれない☆
だから C言語には 数が4種類あった☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 全部 long にしたらダメなのか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 メインメモリが 32MB(メガバイト) の時代とかあった☆
現代は メインメモリが 16GB(ギガバイト) とかだろ☆
つまり 省スペース でどれだけ何ができるか、という時代があったんだぜ☆ 型とはメモリの使い方だった☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 だから例えば☆」

Test:

$a as char = 2
$b as char = 3
Print $(MaxChar $a $b)

$a as short = 2
$b as short = 3
Print $(MaxShort $a $b)

$a as int = 2
$b as int = 3
Print $(MaxInt $a $b)

$a as long = 2
$b as long = 3
Print $(MaxLong $a $b)

Output:

3
3
3
3

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 最大値の方を選ぶ関数 Max も、型に合わせて MaxChar、 MaxShort、 MaxInt、 MaxLong が用意されていた時代が
短いながらも歴史上に存在した☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 char 型と short 型を比較したいときはどうすんの?」

Test:

$a as char = 2
$b as short = 3
Print $(MaxChar (short)$a $b)

Output:

3

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 いったん char を でかい方の short 型に 格上げしてから比較する☆
これを 型キャスト と呼んだ☆
Python では こんなの見かけることもないだろ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Rust では見かけるよな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Rust 使いは型に合わせて Max 型を何個も用意しているの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そんなことはしない☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 しかし こんな話は インプリメント の話しであって プログラミング の話しではないことに
注意してもらいたい☆
つまり、コーディングマン、 コーダー 寄りの話しなんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 プログラミング の話しなのか、 コーディング の話しなのかは まず区別しろだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んは コーダー寄り だけどな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 プログラミング を基礎教養にして  型キャスト なんか知ってるやつが出てきても
他の分野に応用が利かないだろ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Visual Basic 2003 を覚えたら もう Python 3 とか JavaScript ES6 とか覚えたくないのは人情よね。
プログラミングを 基礎教養にするって 何なのかしら?
覚える必要のある 1つのプログラム言語 だけ 教えてくれればいいの」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 喜べ、フロントエンド、バックエンド、オフィスソフト、ゲーム、人工知能、組み込み、 それぞれ1個ずつ 覚えろだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 やだ!」

<書きかけ>


むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント