プログラミング言語 Go を読みながらメモ。
第一章 : https://qiita.com/Nabetani/items/077c6b4d3d1ce0a2c3fd
第二章 : https://qiita.com/Nabetani/items/d053304698dfa3601116
で。
#整数 - 演算子
&^
という演算子があることに驚いた。というか、要らない気がする。
a &(^ b)
と a &^ b
は同じでしょ? → 当記事のコメント欄参照のこと
なぜ bit not を ^
にしたんだろう。由来が気になる。
指数演算子がないのがちょっと残念。
#整数 - Cとの違い
C 言語と異なり、整数の int への自動昇格がないので、
package main
import "fmt"
func main() {
b := byte(255)
fmt.Printf("%d\n", (b << 1)) //=> 254
}
となる。
C言語では
#include <stdio.h>
#include <stdint.h>
int main()
{
uint8_t b = 255;
printf( "%d\n", b<<1); //=>510
return 0;
}
となる。要注意と思う。
あと。剰余の扱いが、私の好きじゃない方になっていた。
package main
import "fmt"
func main() {
fmt.Printf("%d\n", -5%3) //=> -2
}
ということ。まあ昔の C言語みたいに処理系依存?であるよりはずっといいけど。
実装依存の変換
1e100 のような巨大な数を整数に変換した結果が実装依存なのは残念。手元の処理系では
package main
import "fmt"
func main() {
f := 1e100
fmt.Printf("%x\n", int(f)) //=>-8000000000000000
fmt.Printf("%x\n", int32(f)) //=>-80000000
fmt.Printf("%x\n", int16(f)) //=>0
fmt.Printf("%x\n", int8(f)) //=>0
}
となった。ちょっと気持ち悪い。
ちなみに、int(1e100)
とじかに書くとコンパイルエラーになった。好ましい。
ちなみに同じ様にたぶん処理系依存の C 言語では
#include <stdio.h>
#include <stdint.h>
int main(){
printf( "%llx\n", (int64_t)1e100); //=> 7ffee017b910
printf( "%x\n", (int32_t)1e100); // => 100
printf( "%x\n", (int16_t)1e100); //=> 0
printf( "%x\n", (int8_t)1e100); //=>0
}
と、さらに気持ち悪い結果になった。
複素数型
言語組み込みで 1.2+3.4i
のように複素数が書けるのは好ましい。ここは ruby と似ているけど、要素型が浮動小数点に決まるところは似ていない。ruby は整数型を要素にも出来るからね。
imag
と real
が、関数であってメソッドではないのはちょっと違和感があるけど、まあそういう文化なのだろう。
真偽値
言語 | 真偽 |
---|---|
C言語 | 0と _False が偽で、それ以外の整数は真 |
GoとJava | true のみが真で、false のみが偽 |
Ruby | false と nil が偽で、それ以外は真 |
JavaScript と PHP | むずかしい |
C++ | ややむずかしい |
ということで、Go は Java と同じ道を選んだようだ。
後知恵で Google 様が作っているんだから当たり前だけど、JavaScript や PHP の選んだ道を進まなくて良かった。
Ruby の選んだ道が一番好きなんだけど、Go の立場なら Java と同じだろうなぁとも思う。
文字列
文字列が変更不可能なのは、好ましい感じがする。UTF-8 にべったりという立場も悪くない。
strconv.FormatInt
と strconv.ParseInt
があるので、どう書くで n進数の問題が出ても安心。
Ruby のような多彩な文字列定数表記がないのは残念。バッククオート表記しかないのか。
iota
ギリシャ文字の ι / Ι (見てくれではなんだかわからないが...) なんだろうけど、なぜ iota なのか、由来情報も書いてほしかった。
型なし定数の精度
Pascal の定数も型がないんじゃなかったっけ。うろ覚え。
あと、精度がどうなっているのか実験したい。
内部的に 128bit 整数があるのなら、言語にも出してくれればいいのに。
次は第四章 : https://qiita.com/Nabetani/items/59bfd00dc3323883a07f