こんにちは、ナナオです。

前回に引き続き競プロを実施していきたいと思います。

今回の問題は以下です。

ifを使いますか?三項演算子を使いますか? | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】

実装

実装は以下の通りです。

package main
import (
    "fmt"
    "strings"
)
func main(){
    var a int
    var b, c, d, e string
    fmt.Scan(&a, &b, &c, &d, &e)
    if a > 0 {
        fmt.Println("plus")
    } else {
        fmt.Println(a)
    }
    if b == "hoge" {
        fmt.Println("yes")
    } else {
        fmt.Println(b)
    }
    if len(c) == 10 {
        fmt.Println("ten")
    } else {
        fmt.Println(c)
    }
    i := strings.Index(d, "x")
    if i != -1 {
        fmt.Println(i)
    } else {
        fmt.Println("nothing")
    }
    if len(e) == 5 {
        fmt.Println("five")
    } else {
        fmt.Println(string(e[0]))
    }
}

Goは三項演算子がないので、普通にif文で実装しました。

かなり冗長ですね。

ということで、三項演算子を代わる関数とif初期化文を活用することでこの冗長性を少しでも減らします。

package main
import (
    "fmt"
    "strings"
)

func iif(cond bool, t, f any) any {
    if cond {
        return t
    }
    return f
}

func main(){
    var a int
    var b, c, d, e string
    fmt.Scan(&a, &b, &c, &d, &e)
    fmt.Println(iif(a > 0, "plus", a))
    fmt.Println(iif(b == "hoge", "yes", b))
    fmt.Println(iif(len(c) == 10, "ten", c))
    
    if i := strings.Index(d, "x"); i != -1 {
        fmt.Println(i)
    } else {
        fmt.Println("nothing")
    }
    
    fmt.Println(iif(len(e) == 5, "five", string(e[0])))
}

かなりすっきりしましたね。

では今回はこれで👍