※ Kotlinは遊びでちょっとしか触ったことないので、詳しい人は突っ込んでくれると助かります。
a
が1
では無いときは0
であると仮定すれば、次のように書くと良いでしょう。
Kotlin
1val siritaiHENSUU = if (a == 1) {
2 2
3} else {
4 0
5}
if
内部は式一つなので{}
はなくても良いです。siritaiHENSUU
はInt
であることが自明なので、型をつけてもつけなくてもいいです。(ここら辺はコーディングスタイルかと思います。)
Kotlinのif
は式です。式であるがゆえにこのような書き方ができます。Javaなど他言語の場合はif文しかないため、三項演算子条件 ? 真の場合の式 : 偽の場合の式
を用いる必要があります(逆に、Kotlinには三項演算子はありません)。
【すこし蛇足】
質問者の回答のまずい点
質問者の自己回答には二つの問題があります。
- スコープを不用意に大きくしている。
質問の内容からsiritaiHENSUU
はif
の外側直下、広くてもメソッド中だけで有効であれば十分でしょう。しかし、質問者のコードはクラス全体まで不用意に大きくしています。スコープを拡げることは思わぬ副作用を招くため、慎重に行うべきです。
- そもそも
val
なのでエラーになる。
val
は再代入不可です。つまり、このコードは別のエラーを発生させるだけです。var
にすればコンパイルエラーは無くなりますが、その他の部分で代入できてしまいます。インスタンス変数にすることをこだわるなら、せっかくのval
が劣化してしまうと言うことです。
【完全な蛇足】
既に回答を知っている質問をした後すぐに回答するのはありか?
他所の所ですが、スタック・オーバーフローには自分の質問に回答できますか?という項目があります。スタック・オーバーフローではすでに回答を知っていても、質問するのにあわせて回答することは、いわゆるQ&A形式というナレッジになるため推奨される行為です。
ただ、質問と同時に回答する行為はある程度の信頼度が必要です。15はとても低いように思えますが、単に回答しても信頼度が上がらないスタック・オーバーフローにおいて、知識が全くない人にとってはかなりハードルは高いと思います。また、最初に回答する機会を失った場合、信頼度が100なければ8時間待つ必要がありますし、さらに、自己回答を承認(teratailでいうベストアンサー相当)するには48時間待たなければなりません。これは、少なくともスタック・オーバーフローを知っていて、ある程度回答等をしたことがあるかどうかでふるいに掛けると同時に、自己回答やその承認に実行不可時間を設けることで、他の人のよりよい回答をえる機会を増やすことを目的にしています。
さて、teratailはどうかというと、別にそのようなルールはみあたりません。自己回答はいつでもできますが、質問した後も試し続けている人であれば、誰かの回答の前に解決策がみつかることも希によくあることですので、制限等をしないのは当たり前かと思います。かといって、回答を知っているのに質問して、すぐに回答をつけて、ベストアンサーにするという行為はどうなのでしょうか?
スタック・オーバーフローのように、信頼度や時間による制限があれば、質の悪い回答は駆逐され、よりよいナレッジが増えることにもなりますので、悪いことではないように思います。しかし、teratailにはそのような仕組みがありません。逆の見方をすれば、質の悪いQ&Aが大量に作られてしまう機能的な欠点があるとも言えます。多くの人が、そのような欠点につけ込んで、自己満足のためにQ&Aを作って行けば、質の悪いナレッジになってしまうのではないのでしょうか?
ひとまず、teratailの運営がどのように考えているかまでは私は知りません。ただ、スタック・オーバーフローのような考えでQ&A形式の質問と回答をしたいと主張するのであれば、他のより良い回答を待つべきでしょうし、人の意見は真摯に聞くべきかと思います。少なくともteratailがどういうものかを知ってから、半年ROMってろとまで言いませんが、ある程度は質問や回答を行ってから、行うべきでは無いでしょうか。