Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

rustとscalaとkotilnの勉強 数当てゲーム(kotlin) 2回目 と3つやってみた感想

More than 1 year has passed since last update.

TRPLの数当てゲーム。
kotlinもループを使わずに書いてみる。
kotlinにはeitherとかoptionとかmaybe みたいなものがない。
エラーハンドリングもtry-catchしかない。
成功失敗と戻り値を戻したかったのでとりあえずPairで逃げておいた。

結構色々ないkotlin。
・・・と思いきやジェネレータはある。
ただしthe feature "coroutines" is experimental
yieldでシーケンスを作れるのはやっぱり楽。
rustにも早くこないかな。
kotlin.coroutines.experimental.buildSequenceで無限リストをつくるようにした。
ネームスペースにcoroutinesと入っているのを見てもわかるように、ジェネレータに特化したものではなく、コルーチン諸々があってジェネレータはその一部、みたいな感じっぽい。
ほかの機能はみてないけど。たぶん。

import java.util.Random
import kotlin.coroutines.experimental.buildSequence
fun main(args:Array<String>){
    val secret_number = Random().nextInt(99) + 0
    println("秘密の数字は次の通り:${secret_number}")
    println("数をあててごらん")
    println("ほら予想を入力してね")
    buildSequence{
        while(true){
            yield(readLine())
        }
    }.map{
        s->try{
            Pair(true,Integer.parseInt(s))
        }catch(e:Exception){
        Pair(false,0)
        }
    }.filter{
        p->p.first
    }.map{
        p->p.second
    }.map{
        i-> when{
            i==secret_number -> {println("正解");i}
            i<secret_number -> {println("小さ過ぎる");i}
            else -> {println("大き過ぎる");i}
        }
    }.filter{
        i->i==secret_number
    }.first()
}

書いてて思ったけど、mapとかfilterとかでチェーンしていく中でエラーが起きる可能性がある処理が挟まるとやっぱりeitherなりrustのresultみたいなのがないとなんかイマイチ。
scala,rust,kotlinだとやっぱscalaが一番かきやすかった気もする。
scala>>>>rust,kotlinかなあ。
rustはコンパイラとの戦いが辛かった。
kotlinは、、、一番文法を調べずに書いてるのでしょうもないことで時間がかかった。
{をどうしても(と書いちゃって・・・

あと、rustはコンパイラとの戦いが辛いんだけど、コンパイルエラーの内容が本当に親切。
rustになれると他の言語のコンパイルエラーが心もとなく感じる。

いいかげん数当てゲームはやめて先にすすまねば・・・

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away