Help us understand the problem. What is going on with this article?

プログラミング言語Go読書会#6(3.5.5-4.3)[2017/04/19]

More than 3 years have passed since last update.

Go読書会 #6 ランサーズ株式会社で行われたので進捗と技術的なメモ書きを書いておきます。読書会の内容はプログラミング言語Goを冒頭から皆で読み進めていくというものです。

進捗した内容

  • 3章 基本データ型
    • 3.5 文字列
    • 3.5.5 文字列と数値の変換
    • 3.6 定数
    • 3.6.1 定数精製器 iota
    • 3.6.2 型つけなし定数
  • 4章 コンポジット型
    • 4.1 配列
    • 4.2 スライス
    • 4.2.1 append関数
    • 4.3 マップ

話題に上がった話

3.5.5 文字列と数値の変換

Goの場合の文字列から数値の変換方法は、fmt.Sprintfstrconv.Itoaのようです。ここで話題になったのは、人によってはSprintfで変換するのを好まない人がいるというのと、PHPの場合は、文字列として宣言しても普通に数値として扱えます。場面によってはintvalとか使って保証したいときもあるでしょうけど。

> php -a

php > $data = "42";
php > echo $data + 100;
142

あとは、何故Goの型の宣言がこの順番になったのかという質問がでて、その場では分からなかったんですが、Go's Declaration Syntaxに書かれていました。パースに関連していた用です。

3.6.1 定数精製器 iota

この、定数精製器iotaは割と珍しい機能なのでちょっとだけ話題になりました。特に例に出てくる1024の累乗に名前をつけるこの書き方_ = 1 << (10 * iota)は面白かったです。

3.6.2 型つけなし定数

ここで気になったのは、コンパイラは、型に結びついてない定数を基本型の値よりもはるかに高い数値精度で表現しますというところで、型が定まってないので精度高い状態で表現しておかないとまずいのでこうなってるのだろうなと思いつつ。こういう遅延みたいなことができるんだと驚きました。

4.1 配列

ここでは、配列が固定長であることのメリットは何なのかという疑問がでました。動的に確保するのは余計な処理が入りますし、パフォーマンス面が大きいとは思います。

4.2 スライス

ここでは、スライスの構造そのものに対しての初見の人は割と面食らっていました。話題になったのは、スライスに対するlenとcapが返す値がなんなのかでした。確かにスライス演算子を使用した場合のlenはともかくcapは分かりづらいです。しかし、中に書かれている図が割と分かりやすかったのでそれで助かりました。

4.2.1 append関数

ここで、実際にスライスに対して項目を足していく処理を行える関数appendが出てきました。ここで出てきたAppendIntの説明でスライスがどうやってデータを増やしているかなどが分かりやすく書かれていたので良かったです。ちなみに、現在のAppendIntは中身がformatBitsというものになっていてこの本の内容とはちょっと変わっていました。

そのあと、Intがあるなら、他にも有るだろうと言うことでAppendStringとかAppendFloatとかを参加者で探してみたりしました。

4.3 マップ

スクリプト言語を扱っていると割と使用されるデータ構造ですね。ここでは、マップのkeyをforなどで取り出した場合、その順序がランダムなのか入れた順番が保持されているのかということが話題になりました。PHPの場合は順番が保持されていて、Perlの場合は5.18からhash randomizationが導入され、キーの順序が保証されなくなりました。C++のSTLでは自前でソートする必要があるようです。

ここまで読んだところで時間になりました。次回は 4.5 構造体からです。

amesho
ニャンサムウェア
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした