Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
生徒
「Go言語では、if文を短く1行で書くことってできるんですか?」
先生
「いい質問ですね。Go言語には、他の言語でよく使われる『三項演算子』はありませんが、似たようなことを1行で書く方法がありますよ。」
生徒
「三項演算子ってなんですか?そして、それがなくても大丈夫なんですか?」
先生
「三項演算子とは、条件 ? 値1 : 値2という形で、条件に応じて値を切り替える書き方です。Go言語ではこの構文は使えませんが、代わりにif文を工夫して、1行で似たような処理を書く方法があります。では、わかりやすく解説していきましょう!」
1. 三項演算子とは?Go言語にはない理由も解説
まずは「三項演算子」とは何かを整理しておきましょう。他のプログラミング言語(C言語・Java・JavaScriptなど)では、条件によって値を分けたい時に、短く書ける特別な記法が用意されています。
let result = (score > 60) ? "合格" : "不合格";
この書き方は「条件が真なら左、偽なら右の値を選ぶ」という意味になります。慣れると読み書きはとても早く、プログラムを短くまとめたい時に便利です。
ところが、Go言語にはこの三項演算子がありません。「便利なのになぜ?」と思うかもしれませんが、そこには理由があります。Goの開発思想には「コードは人が読めることが大切」という考え方があるため、パッと見て意味が分かりにくい書き方を増やさないようにしているのです。
つまり、Go言語はシンプルさと読みやすさを優先しているため、三項演算子をあえて採用していません。その代わり、if文を使って同じ結果を表現できます。書き方は少し違いますが、やれることは同じなので心配はいりません。
2. Go言語で条件式を1行で書くには?代替方法を紹介
Go言語には三項演算子がない代わりに、if文を1行で書くことで似たような処理を実現できます。
例えば、「スコアが60以上なら合格、それ以外は不合格」という条件を実装してみましょう。
var result string
if score >= 60 {
result = "合格"
} else {
result = "不合格"
}
このように、通常の書き方では3行以上使いますが、if文の中で代入だけを行うようにすれば、1行で書くことも可能です。
if score >= 60 { result = "合格" } else { result = "不合格" }
このようにすれば、1行で条件を記述できます。ただし、読みやすさを損なわないように注意しましょう。
3. 簡単な実行例で学ぼう!Go言語での条件式1行記法
それでは、実際のGoプログラムで、条件によって値を決める処理を1行で書く例を見てみましょう。
package main
import "fmt"
func main() {
score := 75
var result string
if score >= 60 { result = "合格" } else { result = "不合格" }
fmt.Println(result)
}
このコードでは、スコアが60以上なら「合格」、それ以外なら「不合格」と表示されます。
合格
4. ifの中で変数を定義する方法(短縮記法)
Go言語では、if文の中で一時的な変数を定義して使うこともできます。これは「短縮記法」と呼ばれるテクニックです。
if value := getScore(); value >= 60 {
fmt.Println("合格")
} else {
fmt.Println("不合格")
}
value := getScore() という形で、ifの条件式の中に変数を定義できます。この変数はifとelseの中でだけ使えるようになります。
この書き方を使えば、わざわざ事前に変数を宣言しなくても済み、スッキリしたコードになります。
5. 1行で書く際の注意点
Go言語では、条件式を1行で書くことができますが、コードが読みづらくなる場合もあります。
たとえば、処理の内容が長くなったり、条件が複雑になった場合は、無理に1行で書かずに、複数行に分けて書く方が良いです。
1行にまとめられるのは、簡単な条件と簡単な処理の場合に限る、ということを覚えておきましょう。
6. Go言語で使えるその他の条件式の書き方
Go言語では、switch文を使って複数の条件分岐を書くこともできますが、1行記法では主にif-elseを工夫するのが基本です。
次のように、数値の範囲によってメッセージを変える例を見てみましょう。
score := 45
message := ""
if score >= 80 {
message = "優秀"
} else if score >= 60 {
message = "合格"
} else {
message = "再試験"
}
fmt.Println(message)
このような場合は、無理に1行にせず、読みやすく整理するのがポイントです。
まとめ
Go言語では、三項演算子のような記法は使えませんが、if文を工夫することで1行記法として同様の処理が可能です。本記事では、Go言語に三項演算子がない理由から始まり、if文を使った短縮記法や、変数の定義を含めた1行での書き方まで丁寧に解説しました。
実際にGo言語で「条件によって文字列を切り替える」コードを1行で書く方法は、以下のような形でした。
if score >= 60 { result = "合格" } else { result = "不合格" }
さらに、次のようにif文の中で変数を定義し、そのスコープ内で処理を完結させる書き方もありました。
if value := getScore(); value >= 60 {
fmt.Println("合格")
} else {
fmt.Println("不合格")
}
このような短縮記法は、Go言語の読みやすさや明快さという設計方針に沿った書き方でもあります。三項演算子のような短い構文は一見便利に見えますが、可読性の観点では混乱を招くこともあり、Goではそれを避ける設計となっているのです。
また、Go言語では複雑な条件式や処理が増える場合は、無理に1行で書かず、複数行に分けて明確に記述することが推奨されます。このバランス感覚が、Go言語を扱う上での重要なポイントといえるでしょう。
本記事を通して、Go言語における条件分岐の書き方を深く理解できたかと思います。特に、JavaScriptやC言語などの経験者がGoに入門する際には、「三項演算子が使えない」という点が引っかかることがありますが、Goらしい書き方を知ることで、シンプルかつ意図が明確なコードが書けるようになります。
ぜひ、Goのコーディングスタイルに慣れていく中で、条件式の1行記法や短縮記法を適切に使いこなしましょう。そして、コードの可読性を保ちつつ、エレガントに処理を記述する力を磨いていくことが、実践的なGoプログラマーへの第一歩になります。
生徒
「Goって三項演算子がないのは不便かなって思ってたけど、if文で1行に書けるって知ってスッキリしました!」
先生
「そうですね。Go言語は明快なコードを書くことが大事なので、あえて三項演算子を排除しているんです。代わりにif文を工夫して使えば、同じように書けますよ。」
生徒
「あと、if文の中で変数を定義できる『短縮記法』も便利ですね!関数の戻り値を一時的に使いたいときに役立ちそうです。」
先生
「そのとおりです!短縮記法は一時的なスコープで使えるので、読みやすくスマートなコードになります。ただし、複雑な処理は無理に1行にせず、適切に分けるのがGoの流儀ですよ。」
生徒
「はい!読みやすさも大事にして、Go言語らしいコードを心がけていきます!」