非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Go言語って何ででこんなに偏屈なんだろう

      2017/03/11

ざっくりGo言語を触ってきました。

今までJavaとかC#をメインに使ってきた僕としては、一見先祖返りしたような仕様にちょっと戸惑いました。

「コンパイル速度を上げる」目的で作った言語とのことで、その目的のためにコーディングしやすさをある意味犠牲にした、といいう点は理解できます。

が、明らかにコンパイル速度(あるいは実行速度)とは関係ないところで使い勝手を「わざと」悪くしたとしか思えない仕様に、Googleエンジニアの偏屈さを感じずにはいられません。

僕の単なる認識不足だけかもしれませんが、僕自身が感じた”偏屈”と思ったところを書いておきます。

※アイキャッチ画像に自作Gopher君を載せていますが、Gopherの原著作者はRenée French氏です。

広告

nullじゃなくてnil

「何もない」を表すnilですが、どちらかというとnullと表現する言語の方が多いです。C/C++, Java, C#もそうだし、Googleが愛用しているPythonだってnull。nilとnullのどちらも存在する言語があるらしいんですが、Goはnilしか存在していません。だったらみんな慣れ親しんでいるnullにした方が良かったんじゃないかなって思います。

あえてnilにした理由を知りたいです。

なんで、func int f()じゃなく、func f() intなのか

この順番がコンパイル速度や実行速度に効くとは思えず(だよね?)、であれば、なぜこの順序にしてしまったのかとても不思議です。ちょっとしたことなんだけど、覚えたての頃はこんなところにも混乱が生じてしまうし、みんなGoだけ使っているわけじゃなので、他の言語を使っているときは返り値の型が前で、Goは後ろで、ってイチイチ頭を切り替えなきゃいけないんですよね。

僕なんか、C#を使った後にVBAを使うと、うっかりコメントアウトを//にしてしまったり、こういう混乱ってあると思うんです。

こういうところに小っちゃい工数が積み重なったりするんじゃないかなって思います。

var hoge int は不可解

変数の型宣言するときに、var hoge int って書きます。

型が後ろにくる点は前述の通りで書くまでもありませんが、もう1つあって、varいらなくね??

varって「暗黙的に型指定」で使うものだけど、intってちゃんと明示しているんですよね。hoge int でいいんじゃないかと思うんですが、なぜわざわざvarを入れるのか不思議です。

まだいろいろある

代表例を書きましたが、まだまだあります。

例外処理がなく複数返値でエラー情報を返すのはいいとして、もしゼロ除算する可能性がある部分があったらどうやって例外処理するのか?とか。

頭文字が大文字になるとパブリックになるとか手続き端折りすぎだってことや、そんな構文を端折れるんなら、型宣言の順番(func f() int)くらい他の言語に合わせられるんじゃないかとか。

結局のところGo言語って、Googleエンジニアが「オレっちの言語はほかと違うぜぃ」って自己陶酔しているオーラを感じずにはいられません。

Gopherの原著作者はRenée French氏です。

久々にプログラミング言語の初心者本買いました。今までだいたいネットで勉強できたんですが、仕様が特徴的なのでちゃんと本読んだ方がいいと思って。

 

 

 - Go言語, 技術系コラム