或阿呆のブログ

巷では、武器商人@ダーツで通っています。Python好き好きプログラマーです。芥川龍之介、太宰治が好きです。

へぇ!配列の添字がオーバーしてもセグメンテーションフォールト起きないんだ!インクリメントを有難がってはいけない。

久しぶりにCを触っていて、使いにくすぎて死にそうなんて、家でもちょっと触ってみた。リハビリ的なw

C言語って、昔の記憶によれば、配列の添字がオーバーすると、すぐセグメンテーションフォールトで落っこちてた気がする。

#include "stdio.h"

int main(){
	int array[10];
	int i = 0;
	for(i = 0; i <= 11; ++i ){
		printf("i:%d array[%i]:%d\n",i,i,array[i]);
	}
}
$./a.out 
i:0 array[0]:134520832
i:1 array[1]:134513842
i:2 array[2]:1
i:3 array[3]:-1079181756
i:4 array[4]:-1079181748
i:5 array[5]:-1218153947
i:6 array[6]:-1216454032
i:7 array[7]:0
i:8 array[8]:134513769
i:9 array[9]:-1216634880
i:10 array[10]:134513760
i:11 array[11]:0

こんなもんだったっけか?まぁそれはいいとして。

演算子++は↑のようは使い方をする言語にとっては、必要だし、便利だ。

Pythonには++演算子は無い!

In [1]: i = 0

In [2]: i++
  File "<ipython-input-2-27239b6fb79f>", line 1
    i++
       ^
SyntaxError: invalid syntax

最初は、なんだ、不便だなーと思っていたのだが、よくよく考えてみると。Pythonには、i++なんて不要なんだ。

PythonにはC言語風のforループが無いからね。Perlとかで言うところの、foreachに違いのがPythonのfor。

In [1]: l=[1,2,3,4,5]

In [2]: for num in l:
   ...:     print num
   ...:     
1
2
3
4
5

こういう使い方をする言語にとっては、++演算子なんて不要だよねという話。リストの個数とかは、言語側で数えてくれるから。

不便な実装を多少便利にするための便利機能が無いことによって不便さを感じてはいけない!

不要なものは不要なんだ。

要らないよ〜。

お次はRuby

$irb
irb(main):001:0> i = 0
=> 0
irb(main):002:0> ++i
=> 0

エラー出ないけど無いっぽい。

お次はHaskellに至っては、変数の代入すら出来なかった。最近は出来るんだっけ?
すごいHaskell楽しく学ぼうを読んだけど、目次に変数なんていう言葉すら見当たらなかった。。。

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

どうやら、私はHaskellに学ぶことが多いように感じてきたのは、そういう事情もある。

とにかく、様々なプログラミング言語に触れ、無駄肉を落とさねば。