python 入門中

C言語の呪縛なのか?

添字とかが 0 から始まるのが嫌。1番目は 1 に決まってるでしょ。普通の人の思考では。0 から数える人なんて見たこと無いよ。

例えば、文字列の 5 番目から 10 番目を取り出すコードとかね。str[5:10] でいいじゃん。すげーわかりやすいじゃん。バグ率ほぼ0だよねこれなら。なにがいけないのこれで。

でも違う。str[4:10] になるんかな? 開始は 0 から始めるから 5 - 1 で 4 になって、終わりは +1 になるんだけど 0 からだから 9 + 1 で 10 になるという・・・わかるかこんなもん!ひっかけ問題かっ!

ぷろぐらまー「アドレスのオフセットだかr」

(かぶり気味で)機械の都合なんて知るかよっっ!

絶対バグる自信あるわ。機械の都合に思考を合わせるの無理!!

 

例えば Smalltalk。古い言語ですわ。Python の大先輩ですよ。

配列オブジェクトの 1 番目の要素を拾えというコードはこう書く。

#(123, "abc", 345, "def") at: 1

あるいは、

#(123, "abc", 345, "def") first

1番目は「1」 と指定する決まってる。

 

ぷろぐらまー「ループの終了条件で i=0 から i < max まd」

(かぶり気味で)いつまで君らは for 文でループしてんのじゃ!そんなもん未だに使ってるから OOP が身につかないんだろが!!パラダイムシフトしろ!!!心を解き放て!!!!!

 

さて、Smalltalk では、1 から 10 までを自乗するコードはこんな感じに書く。

(1 to: 10) collect: [:each | each * each]

インスペクタで見てみると

f:id:umeaji:20200207171809p:plain

こうなります。

ちなみにループ構文なんて出てきませんよとw

 

範囲指定してみます。2 番目から 5 番目まで。

(1 to: 10) collect: [:each | each * each] from: 2 to: 5

f:id:umeaji:20200207171825p:plain

2 番目は 2 だし、5 番目は 5 だよ。

Index の所にも注目して。「0」なんて無いし。

なんてわかりやすいんだ! 単純明快で素晴らしいでしょう?

 

複素数の怪

どうして虚数リテラルを j にしてしまったのか。数学では虚数は i でしょ。意味わかんないよもう。言語の独自仕様で覚える事増やすのやめてくれ。