[golang]Arrayのオススメな使い方

こんにちは。KOUKIです。

とある企業でWeb系の開発業務に従事しています。メインはGo言語です。

今日は、Arrayのオススメな使い方について記事にしました。まぁ、以前も同じような記事を書いたのですが、もう少し掘り下げてみようかと。

Arrayの書き方に偏見を持ってない?

最初に質問せてください。Arrayの書き方に次のような偏見を持ってませんか?

話題にしたいのは、「var books [4]string」の数値の部分です。

ご存知の通り、Arrayは長さが決まっているデータセットですが、長さには「数値を直接代入する」のが一般的なセオリーですよね。

しかし、次のような書き方もできるのです。

はい。別に数字じゃなくてもOKって感じです。

「いやいや知ってるけど」という人は無視してください。だけど、意外に盲点だった!という人もいるのではないでしょうか?「あ、できたんだ…」みたいな。

「savedBookNumber」のような変数は説明変数と呼ばれており、プログラムの可読性を大幅に向上します。

Arrayの初期化、ちゃんと活用できてる?

Arrayの初期化処理に書きがちなのが、以下のコードです。

これも悪くはないのですが、宣言と同時に初期化しちゃった方がシンプルです

玄人には当たり前の書き方なのですが、意外に盲点だったりするんですよね。

ちなみに、要素数全てにデータを入力しなくてもデータ型の初期値が入るので大丈夫です。

省略記号「…」が便利だってことを教えてあげよう

皆さんは、省略記号「…」を活用できてますか?ちなみに私はできてませんw

結構便利なんですよ。これ。

savedBookNumberの代わりに、「…」を代入しました。これがどうなるかというと…

ご覧の通り、ちゃんと処理ができます!初期化したデータに基づいてArrayの長さを決めてくれるようですね。

え?これならスライス使えばいいんじゃない?」という声が聞こえてきそうですが…

Arrayは、長さが決まっているデータセットなので、要素数をオーバーすると上の画像のようにエラーになります!

ループはこうやって処理できるよ?

次は、Arrayと切って離せない存在であるループ処理です。Arrayとループ処理は、蜜月な関係ですよね^^

しかし、以下のように「いけてないコード」をよく見かけます。

これの何が悪いんだ!」と怒られるかもしれませんね。しかしこの書き方だと、たまに「要素数を超えてアクセスする可能性」がありますよね?

以下のように書きましょう。

rangeキーワードを使えばOKです。Arrayの長さ分しかループしないので、要素数をオーバーすることはありません。

Keyを数値以外で指定する方法

ArrayのKeyは普通数値で指定しますよね?こんな感じで。

このKeyを数値以外で指定する方法を紹介します。

紹介の前に、少し小話をさせて下さい。

下記のコードは、Arrayの初期化と宣言を同時に行なっています。

このコードが面白いのは、初期化時にKeyを宣言していたり、しなかったりしているところです。

この様な書き方は、あまりしないですよね? 結果は、以下のようになりました。

rate配列は初期化時にデータの長さが決まる可変長引数(…)を指定しています。そのため、 Keyを指定していない(2.5)場合は、最後のKey(5)の後にデータが追加されるようです。

さて、本題に戻ります。

Keyには、数値が指定されていればOKです。つまり、以下のようにすれば数値以外のKeyを指定することができます。

iotaは、定数内で規定される識別子で、0から形無しの整数を生成します。

つまり、ETH=0, WAN=1の感じで数値が入るので、Keyの代わりになります。

ArrayのKeyは、0以上でないといけないので(負の値はいれられない)、この方法以外ではKeyの代わりにできないかもしれません。

試しにuint型でKeyの代替を試みましたが、エラーになりました。

おわりに

Go言語には、SliceやらArrayやらMapやら、色々なデータセットがあります。しかし、これはGo言語に限った話ではなく、JavaやPythonなど様々なプログラミング言語に存在します。

そのため、一つの言語でデータセットを極めれば、割と他の言語でも応用が効きます!

本当に大切なことなので、しっかり学んでおきたいですね^^

それでは、また!

Go言語記事まとめ