お仕事で、Go言語のソースを読もうとしている。
書こうとしている、ではない。
読むだけだ。
もちろん、読み書きできるのが一番良いし、望ましいのだが、いかんせん時間が無い。
あちこち目をつぶって、雰囲気だけつかむことを目指す。
その第1弾が、スライスだ。
スライス型
http://golang.jp/go_spec#Slice_types
スライス
http://golang.jp/go_spec#Slices
スライスは「ある配列内の連続した領域への参照」と書いてある。
そしてスライス型は「その要素型と同じ要素型を持つ配列のすべてのスライスの集合」らしい。
なぜ配列とは別になっているのだろうか?
配列内で、連続した領域を参照しているなら、それはそれで配列なんじゃなかろうか。。。
いま思っているのは、太枠が配列だとしたら、赤い部分がその一部を参照しているうスライスだ。
スライスは要素が0から始まると書いてあるので、こうなるはず。
スライス型の1項目前が「配列型」だった。
http://golang.jp/go_spec#Array_types
配列も型なんだ・・・。
説明だけ読むと、配列型は要素型の要素を複数持っていて、インデックスで連番アクセスできて、長さも持っている、というだけのようだ。
他の言語と同じように見える。
まあ、C/C++の配列は要素数を持たないけどね。
スライスは、キャパシティ、という概念があるようだ。
ちょっと違うが、STLのsize()とcapacity()みたいな雰囲気がある。
上の図だと、capacityは5になるはず。
make()で新しいスライスを作ることができるらしい。
・・・ん?
makeの引数に、要素型と長さの指定、capacityまで指定はできるけど、そもそも参照型だから「誰のどこから」という情報がいるんじゃなかろうか。
「隠された配列を新たに割り当て」など、参照するという言葉の意味が分からなくなってくる。。。
新しい領域を割り当てるんだったら、それはもう配列でよいんじゃないのか??
まだスライス型のところを読んだだけなので、次の「スライス」を読むと謎が解決するのかもしれない。
ともかく、今回はここまで。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。