Go言語の関数を短く書くテクニック(ショートハンド・式形式)
生徒
「先生、Go言語で関数を書くとき、もっと短くシンプルに書く方法はありますか?」
先生
「ありますよ。Go言語では関数の内容が一行で書けるとき、『式形式』や『ショートハンド』と呼ばれる短い書き方ができます。」
生徒
「具体的にはどんな書き方なんですか?」
先生
「それでは、基本から順番にわかりやすく説明していきますね!」
1. 通常の関数の書き方
まずは、Go言語で関数を書くときの基本形を押さえておきましょう。関数は「処理をひとまとめにする仕組み」で、繰り返し使いたい計算や処理を整理するのに役立ちます。ここでは、もっともシンプルな例として、2つの数を足して結果を返す関数を見てみます。
func add(a int, b int) int {
return a + b
}
この関数は、addという名前で、引数としてaとbの2つの整数を受け取り、その合計値を返します。関数は {} の中に処理を書き、その結果を返すときには必ず return を使います。
実際のプログラムで使ってみると、この関数がどのように動くのかさらに理解しやすくなります。
func main() {
result := add(3, 4)
fmt.Println(result) // 7 と表示される
}
このように、関数は「入力を受け取って、処理して、結果を返す」という流れで動いています。まずはこの基本的な構造をしっかり押さえることで、後のショートハンド表記も理解しやすくなります。
2. 式形式(ショートハンド)の関数とは?
関数の処理がとてもシンプルな場合、「もう少し短く書けたら読みやすいのに」と思うことがありますよね。そこで登場するのが、関数をできるだけ簡潔に書くための考え方、いわゆるショートハンド的な書き方です。Go言語は他の言語にあるような「return を省略できる式形式関数」を正式にはサポートしていませんが、考え方として知っておくとコードの整理に役立ちます。
例えば「a と b を足して返すだけ」の関数があったとします。もし Go が式形式をサポートしていれば、次のように書けるイメージです。
// ※イメージ(実際はエラーになる)
func add(a, b int) int {
a + b
}
しかし、Go 言語では必ず return を明示する必要があり、この書き方はコンパイルエラーになります。Go の設計として「返り値があるなら return を書く」というルールがあるため、関数本体から return を省略することはできません。
ただし、「短く書きたい」というニーズ自体は自然なものなので、Go では無名関数や引数の型をまとめる記法を活用することで、関数の見た目をコンパクトにすることができます。特に無名関数は一行で完結しやすく、日常的な処理で便利に使えます。
たとえば、無名関数で書くと次のように一行で処理を書くことができます。
add := func(a, b int) int { return a + b }
fmt.Println(add(2, 3)) // 5
このように、Go では式形式そのものはありませんが、短く書くテクニックを組み合わせることで「関数をコンパクトに見せる」ことは十分可能です。まずは通常の関数構造を理解した上で、ショートハンド的な書き方を選ぶと、コードがすっきり読みやすくなります。
3. 無名関数でのショートハンドの例
無名関数とは、その名の通り「名前のない関数」のことです。通常の関数のように外側で宣言するのではなく、必要な場所に直接書いてそのまま使えるため、ちょっとした計算処理をまとめたいときにとても便利です。特に「一度だけ使う簡単な処理」を短く記述したい場合に役立ちます。
たとえば、2つの数を足す処理を無名関数で書くと次のようになります。
add := func(a, b int) int { return a + b }
result := add(3, 5)
fmt.Println(result) // 8
この例では、func(a, b int) int { ... } という形で関数をその場で作成し、それを add という変数に代入しています。その後は通常の関数と同じように add(3, 5) と呼び出せます。無名関数は「小さな処理をまとめておきたいけど、大げさに関数名を付けるほどではない」という場面でよく使われます。
もう一つ、よりイメージしやすい簡単な例として、文字列を表示するだけの無名関数も書けます。
message := func(name string) string {
return "こんにちは、" + name
}
fmt.Println(message("太郎")) // こんにちは、太郎
このように、無名関数は「小さな処理をコンパクトに書ける」という点が大きな魅力です。特に処理のまとまりをその場で表現できるため、コードが散らばらず読みやすくなる効果もあります。
4. returnの省略はできないが簡潔に書くポイント
Go言語では、関数内で値を返すときは必ずreturnを書く必要があります。
しかし、引数の型が同じ場合は一度だけ型を書くだけでよく、余分な文字を減らせます。
func multiply(a, b int) int {
return a * b
}
このように、引数の型をまとめて書くことができるので、コードがスッキリします。
5. 一行で書くことで見やすくなる関数の例
関数が短いときは、一行でreturnを書くとコードが見やすくなります。例えば:
func square(n int) int { return n * n }
この書き方は短くて読みやすいので、簡単な処理の関数でよく使われます。
6. 複数の値を返す関数も簡潔に書ける
Go言語の特徴として、複数の値を返す関数があります。これも一行で書けます。
func divide(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("0では割れません")
}
return a / b, nil
}
条件がある場合は複数行になりますが、単純な計算や返却は一行で書けます。
7. ショートハンドで使うときの注意点
- 関数の中身が複数行の場合は通常の書き方が必要
- Go言語は
returnを省略できない - 可読性を考えて短く書きすぎないことも大切
シンプルな関数は短く書くと見やすいですが、複雑な処理は分かりやすく書くことが重要です。
8. 関数を短く書くテクニック
Go言語で関数を短く書くテクニックは、引数の型の省略や一行でreturnを書くことです。
無名関数を使うことでよりコンパクトなコードも書けます。
ただし、可読性を損なわない範囲で使うことがポイントです。
まとめ
Go言語で関数を短く書く方法は、日々のプログラムをより読みやすく整理し、複雑な処理を無駄なく表現するためにとても役立つ考え方です。特に、引数の型をまとめて書く工夫や、関数の内容が短い場合に一行で返す形式は、コード全体の見通しを良くし、後から読み返すときにも理解しやすいという大きな利点があります。ふだんの実装では、長い処理と短い処理が混ざる場面も多いため、状況に応じて関数を短く書くテクニックを自然に使い分けられると、Go言語のコード設計がさらに洗練されていきます。 また、無名関数を使ったショートハンドの書き方は、ちょっとした計算や一時的な処理のために非常に便利で、読み手にも意図が伝わりやすい書き方になります。関数を変数に代入して扱うというスタイルは、Go言語の柔軟さを感じられる部分でもあり、複雑な関数型のコードや引数として関数を渡す関数型の書き方にもつながる重要な基礎になります。 一方で、短く書けるからといって何でも短くしてしまうと、かえって読みづらくなる場合もあるので、見やすさと簡潔さのバランスが大切です。関数の中身が複数行になる場合は従来の構文のほうが自然であり、処理の流れを明確に示すことで将来の保守もしやすくなります。こうした点からも、ショートハンドは「使える場面で効果的に使う」という柔軟な考え方が必要になります。 以下に、記事内で紹介した書き方に近い形式でのサンプルコードをまとめとして掲載し、実際にコードを振り返りながら理解を深められるようにしています。
関数を簡潔に書くサンプルプログラム
package main
import "fmt"
// 一行で返すシンプルな関数
func square(n int) int { return n * n }
// 無名関数を使ったショートハンド形式
func main() {
add := func(a, b int) int { return a + b }
fmt.Println(add(3, 7))
fmt.Println(square(6))
}
このサンプルでは、短い処理を一行で書くことでコードをすっきり整えています。特に、square 関数のように小さな処理をコンパクトにまとめると、コード全体の構造を邪魔しないシンプルな見た目になり、処理内容も一目で把握できます。また、無名関数を変数に代入するスタイルは、さまざまな場面で役立つ柔軟な書き方であり、簡単なロジックを一時的に使う場合などにとても便利です。 Go言語では return を省略できないという特徴がありますが、だからこそ書き方を整理することで、より自然で読みやすいコードを書く習慣が身につきます。ショートハンドや簡潔な書き方は、あくまでコードの流れを邪魔しないようにするための技術ですので、使い所を理解しながら応用していくことが大切です。
生徒
「今日の内容で、関数の書き方がとてもすっきりする方法を知ることができました。短い処理なら一行で書いても読みやすいんですね。」
先生
「そうだね。Go言語では return を省略できないから、逆に見やすさを意識してコンパクトに書くことで読みやすいコードを作ることができるんだよ。」
生徒
「無名関数も一行で書けるし、ちょっとした計算ならすごく便利だと思いました。短くても意味が伝わりやすいところが気に入りました!」
先生
「その感覚はとても大事だよ。短さと読みやすさのバランスを意識できるようになると、コード全体がとても整った形になるからね。」
生徒
「複雑な処理のときは普通の関数、簡単なときはショートハンドと使い分ける感じですよね?」
先生
「まさにそのとおり。場面によって自然な書き方を選べるようになると、Go言語のコードはもっと書きやすくなるよ。」