Kotlin 8
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう ※前スレ Kotlin 7 https://mevius.5ch.net/test/read.cgi/tech/1588748438/ >>98 chatGPTにその質問をまるままコピペして質問してみたよ https://i.imgur.com/BhfnYa7.jpg chatGPTの答えで意味通じてる? Kotlinはよく知らないからわからないけど、JavaScriptではすごく貢献してくれている >>101 残念だけど98が知らなけばいけない一番重要な情報が抜けてるから>>99 を見なきゃ駄目だな >>102 そうなんだ chatGPTは人間とのチャットみたいに、ここから掘り下げて質問できることが特徴だから、まず>>98 をコピペしてchatGPTが答えたら、そこから疑問点を次々と納得できるまで入力してみるといいよ >>103 いま>>98 を質問してみると、kotlinx-coroutines-coreを使う方法出てくるからだれかが質問して少し賢くなったのかな でも実行のやりかたがgradle使う方法とkotlinc使う方法がごっちゃになっててダメダメ gradleを使って上記を実行する方法を教えてくださいと質問すると、gradleラッパーを作らないと実行できない方法を回答してきてダメダメ gradleラッパーを作る方法教えてくださいと質問してようやく実行のための手順を全部教えて貰える感じ 初心者がここまで追加の問いをできるとは思えんが kotlinc -classpath /home/hoge/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core-jvm/1.6.4/2c997cd1c0ef33f3e751d3831929aeff1390cb30/kotlinx-coroutines-core-jvm-1.6.4.jar c001.kt -include-runtime -d c001.jar コンパイルは出来ましたが Exception in thread "main" java.lang.NoClassDefFoundError: kotlinx/coroutines/GlobalScope at C001Kt.main(c001.kt:4) at C001Kt.main(c001.kt) Caused by: java.lang.ClassNotFoundException: kotlinx.coroutines.GlobalScope ... chatgptに聞いたりググったりして gradle init --dsl kotlin 2 enter 4 enter ... などとしてみてapp/build.gradle.ktsのdependenciesに implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3") を書いて./gradlew runしてみましたが > Task :app:compileKotlin w: file:///hoge/kt/c001/app/src/main/kotlin/c001/App.kt:4:5 This is a delicate API and its use requires care. Make sure you fully read and understand documentation of the declaration that is marked as a delicate API. そもそもkotlinx.coroutines.*とkotlin.coroutines.*があるようですが コンソールアプリで使えるのは後者なのでしょうか もしそうだとすると上のサンプルコード自体コンソールでは使えないかもしれません 色々試してみていますがまだうまく動かせていません 初心者すぎてすいません chatgptに聞くだけじゃなくて公式ドキュメントも読めよな >>105 まず、>>99 は試したの? 99の手順通りにやって、どこでうまくいってないかを書いてくれ。 >>108 この流れでいまだにkotlinx-coroutines-android だしてくるのはなんなの 混乱させたいの? この頃は自動翻訳しても結構読める日本語になるので、面倒な時は翻訳している。 ブラウザに自動翻訳のボタン付いてて楽だし。 多分>>105 のkotlinc使ってコンパイル成功したやつで実行出来るとおもうんだけど、 コンパイル時に使ったjarの場所を実行時にも指定する必要があるはず gradle使う場合(ここでは7.2使用)はgradle init --dsl kotlinして、質問にはこんな感じに答えて 2: application 4: Kotlin 1: no - only one application project それで作ったプロジェクトでApp.ktを>>98 のc001.ktのコードに置き換えて、 app/build.gradle.ktsのdependenciesにimplementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0")を追加して、 ./gradlew runで実行できたよ ./gradlew buildするとAppTest.ktがApp.ktと合ってないのでエラーになるからappHasAGreeting()の中身を空にしとくといい 113さんの方法で実行できました。バージョンは最初1.5.0でコンパイルしましたが最新の1.7.3でも動きました これで勉強できます。ありがとう! androidアプリでデータ保存するとしたら今はroomになると思うのですが room + koin + coroutine room + coroutine flow room + livedata room + rxjava3 など色々な技術がありますがこれが最新ってのはどれなんでしょうか?オススメの組み合わせはありますか? room hilt coroutine flow viewModel, Jetpack compose >>115 これ前に久々にアプリ作る時に自分で調べたらめっちゃ大変だったけど、>>116 みたいな人神だわ。 以下のbyはどういう文法なのでしょうか val navBackStackEntry by navController.currentBackStackEntryAsState() クラスとプロパティの委譲のbyとはまた別物ですよね? >>119 ありがとうございます 前後の文脈も示すべきでした ttps://developer.android.com/jetpack/compose/navigation?hl=ja ここにあるコードの抜粋 val navController = rememberNavController() Scaffold( bottomBar = { BottomNavigation { val navBackStackEntry by navController.currentBackStackEntryAsState() val currentDestination = navBackStackEntry?.destination ... この使われかたはプロパティじゃないと思うのですがどうでしょうか >>121 ありがとうございます 検索してもインターネットには情報が少ないですね エラーメッセージを頼りにちいさいサンプルを書いてみましたが、 error: unresolved reference: test このエラーが消せませんでした 委譲ならtestが呼べると思ったのですが import kotlin.reflect.KProperty public interface A{ fun test() : Unit operator fun getValue(b : Nothing?, c:KProperty<*>) : String } public val impl = object : A{ override fun test() = println("hello world") override fun getValue(b: Nothing?, c: KProperty<*>) = "str" } fun main(){ val da by impl da.test() } >>122 移譲の形式でval da by implとした場合、da.test()はdaのgetValue(....)した結果をレシーバとしてtest()メソッドを呼ぶという意味になるよね?つまり"str".test()という意味になってエラーになるだろう 移譲でないval da = implとすればda.test()は呼べるはず >>123 ありがとうございます。一人では絶対にわからなかったと思います getValueにはそういう意味があるのですね 以下のように書き換えてhello worldが表示できました import kotlin.reflect.KProperty public interface A{ fun test() : Unit operator fun getValue(b : Nothing?, c:KProperty<*>) : A } public val impl = object : A{ override fun test() = println("hello world") override fun getValue(b: Nothing?, c: KProperty<*>) = this } fun main(){ val da by impl da.test() } 「Kotlin」が人気言語ランキングトップ20に返り咲き--9月のTIOBE指標 https://japan.zdnet.com/article/35208961/ javaのが上なのか Kotlinに移行した開発者は増えてると思うんだがそこまででもないのか? 最近検索にひっかかるドキュメントはjavaよりKotlinのほうが多い印象 Android 向けアプリの開発では結構使われているのではないかな。知らんけど。 Java の場合は20年以上前から色々な事に使われてきてプログラマも多いし本も多いから上なのは当然の事。 というかそもそも Kotlin は JavaVM で動くやつが最初に出て Java のライブラリ使って動くことが前提なのでまだまだ Java なしではいられない状態。 androidはbuild.gradleもGroovyからKotlin(build.gradle.kts)に置き換えられるようになったし かなりKotlin推しって感じ 俺はjavaから乗り換えた。Kotlinは書いていて割と楽しい方だと思う そして名前がかわいいという最強のメリット var書いて変数名の後にコロン書いてまた変数型 の一手間を惜しまない人にはオススメ 型の指定は省略出来ることが多いが、それで可読性が下ることもあるかな。 確かにできるだけ型注釈はほしいな Haskellなんかは型を明示してないとわけわからなくなったり 型注釈によってプログラムの動作が変わるまである 型注釈でプログラムの動作(全解探索か最初の解探索か)が変わるコードを始めてみたときは感動した varとvalの使い分けに価値があるんだから手間とは感じないなあ コーディング量トータルで見たら誤差すぎる JavaScript系でletとconst書くのが面倒とか聞いたことないし まだ使い始めて4ヶ月ぐらいだけど 徹底してnullセーフティを追求する言語仕様のよさがやっとわかりはじめた 基本!!は使っちゃダメなのだよね? 自分で新たに作る Kotlin プログラムでは !! を使うように書く必要性がないのでは? importと利用できる名前が リンク出来ないのが個人的に見づらい Pythonみたく import numpy as np np.array() が見やすく名前の衝突もなくいいなぁ >>135 できるみたいだけど https://codelabsjp.net/kotlin-practice-renameimport/ >【Kotlin練習問題】importの名前を変更する >クラスや関数をimportする際、import文の後にas 新しい名前と書き加えることで >別の名前を指定することができます。別のライブラリからの似たような名前の >クラスや関数を複数個使いたい時など、混乱を避けるのに便利です。 asは知らなかったなー便利だな Kotlinすぐバージョンがあがるから、知らない機能がたくさんある 先日もこんなちょっとクスっとする機能を知った fun main(){ println(1_000_000) //3桁ごとにアンダーバーで区切った数値が使える println(3_000L) //Long型 } クスッとするってそれもうJavaにすら導入されてるよ しかも12年前のバージョンだ 12年前と書いたのはアンダースコアのほうね 100Lみたいな書き方ならJavaが生まれる前の古典 それはすまなかった android-studioが重くてKotlinとおさらばしなければいけなくなったのだが その前にJavaFXでGUIアプリでも作ってみようと思う コマンドラインでコンパイルしたり他のIDE使うとかすれば重いのはなんとかなる ゲーミングPCみたいに無茶苦茶速いPCにしても良い ちょいと宣伝。 更新が止まってたリファレンスの和訳を引き取って、ツアーを一通り和訳しました。 https://karino2.github.io/kotlin-web-site-ja/docs/kotlin-tour-welcome.html 個人的に教えるのに使うために和訳したので需要があるかはわからんけど、一応お知らせ。 >>142 翻訳すごいな いつかはKotlinに。 本家が結構アップデートされてるので既存の和訳を更新したり新しく足されたのは和訳したりもしてるよ。 意外と自分の知らない新機能が入ってたりして勉強になるw 当たり前だけど本家のリファレンスはよく書けてるね。 他の言語の知識が相当あるのを前提にしてるので、教えるのに使うなら副読本とか作らないとダメそうだが… 本家が結構アップデートされてるので既存の和訳を更新したり新しく足されたのは和訳したりもしてるよ。 意外と自分の知らない新機能が入ってたりして勉強になるw 当たり前だけど本家のリファレンスはよく書けてるね。 他の言語の知識が相当あるのを前提にしてるので、教えるのに使うなら副読本とか作らないとダメそうだが… 本家が結構アップデートされてるので既存の和訳を更新したり新しく足されたのは和訳したりもしてるよ。 意外と自分の知らない新機能が入ってたりして勉強になるw 当たり前だけど本家のリファレンスはよく書けてるね。 他の言語の知識が相当あるのを前提にしてるので、教えるのに使うなら副読本とか作らないとダメそうだが… なんかchmateがずっとくるくる回ってるので放っておいたらめっちゃ投稿された… Android Studioでラムダ式の波括弧の色を変えたらコードが読みやすくなるね >>150 11月データに更新されてたけど、 Kotlinが先月18位から今月15位に上がってんね Androidアプリ用途だけじゃなくてサーバー用途のJava-to-Kotlinの置き換えが進んでるってことなのかな 2,3ヶ月後にはGo-langの順位を抜きそう O'Reilly の Kotlin Cookbook の日本語版が出て欲しいところ。 今更だけどアセンブリ言語がこんな高くなるのは どういうポイント付けしてるんだろ Qiitaのアドヴェントカレンダー、Kotlin過疎すぎだろ… >>155 まあ、SpringBootに関する記事がなにかしら上がるっしょ そういやC言語ってまだ大人気なんだな。Python が人気なのはわかるが。 MATLAB という言語は知らなかった。 >>152 ,154 2,3ヶ月後に逆転したら謎だらけ kotlin programming 約 46,300,000 件 (0.30 秒) go language programming 約 1,040,000,000 件 (0.44 秒) こんなことになってるのか rust language programming 約 21,600,000 件 (0.42 秒) https://i.imgur.com/TNA5Ee4.png >>157 MATLABは工業系で計測機器の動作管理によく使うからね 今後も順位をキープしてずっと居座り続けるだろうよ >>156 kotlinで新しくサーバーやるならSpringBootよりktorだろうけど、kotlinでSpringBootやる人しか見ないの笑う、まあいいんだけどさ >>161 どこらへんが笑いどころなのか、よくわからないので教えてほしい。 今時SpringBootなんて書いてるやつはいないだろう SpringBootはアノテーションつけてなんやかんやできるの便利だと思う あけましておめでとうございます ことりんもよろしくおねがいします 200gくらいでPSPやGBAを遊ぶのに最適な機種は何ですか? 元がブラウン管のゲーム機は、RGB30の画面比率で満足しています Powkiddy X55は293gでちょっと個人的に重いです 重くてあまりゲームをやらなくなると思います Switch liteがそうだったので へー。Linux で動いてる携帯ゲーム機なんてあったんだ。知らなかった。 Amazonで「ポータブルゲーム機 linux」で検索すると沢山出てくるな。こんなにあったとは。 Spring bootはアノテーションのつけ方が今一つ どうせなら main 文とか import 文とか全部省略できるようにやってくれればいいのに あと使っているうちに動かなくなるところとか 結局、tymeleef、html,JavaScript と共存することになるので コードが複雑になる mainはわかるけどimport省略って、いったい……? アノテーション使わずに、パッケージ名やクラス名、メソッド名でどうにかするとか? Spring Bootの役割を完全に誤解しているな LombokやBetter Javaではなくエンタープライズアプリの開発フレームワークや アノテーションといえば製品によるだろうけど自作アノテーションでコンパイル時にコード生成させる方法を学んで組み込んだら格段に開発効率が上がった経験あるわ そのコード生成がされるまではJavaのコードとして一時的に不正になるのか、生成前でもJavaとしてコンパイルが通るソースとして成立するのかには隔たりがある 前者はLombokやKotlinのようにコーディング量が劇的に減って便利だとしてもIDEなどのツールにサポートされるまでは使えるツールが制限され普及の障壁になる Spring Bootがimport分やmainの記載を省くような文法変更を加える大げさな仕組みだった場合はここまでの普及はなかった kapt使い慣れると、ちょっとしたことがコード生成でできるようになるから、めちゃくちゃ便利になるよね。 kotlin.collections.MutableMap のドキュメントを見てもソースを見ても computeIfAbsent() メソッドはないのになぜか使えるね。 kotlinx.coroutines1.8.0きたああ! これでKotlinが5位になっていたことに、たった今気付いた。 将来性の高いプログラミング言語とは?タイプ別ランキングTop10 https://www.sejuku.net/blog/124758 >>181 ,182 ここ注目 IEEE調べ2023版Jobs: Groovy > F# >>> Ada > Rust redmonkはChatGPT後のSO激減の扱いを考えすぎちゃって更新止まったか https://redmonk.com/rstephens/2023/12/14/language-rankings-update/ たぶん、Groovy の本は日本で、ここ10年で1冊も出ていない 文法は、Ruby と似ているから、 Ruby on Rails をやれば、おおよそ分かる GroovyなんてJavaのビルド構成触るときにしか書いたことないや それもいまKotlin Scriptに書き直されてもう使うこと無くなりそうだけど 最も年収の高いプログラミング言語は? CAMELORSがランキングを発表 https://codezine.jp/article/detail/19210 1位 Go 2位 Kotlin 3位 Python トップ10の中にRustが入っていないな。まだそんなに年収得られるほど稼げる用途で使われてないのかな? 「Kotlin」を用いたデスクトップアプリ開発の解説書が発売 書籍『入門!実践! Kotlin Compose Multiplatformでデスクトップアプリ開発!』 https://forest.watch.impress.co.jp/docs/bookwatch/news/1584816.html そういやkotlinってロゴもマスコットも影薄いよな… かといってGoみたいにキモいマスコットで有名になっても困る >>193 golang マスコットで画像検索すると見つかる gopherという名前だそうだ go マスコット でも見つかった >Go言語のマスコットキャラクター「Gopher」を愛でる 俺には無理 日本じゃ販売されてないオライリーの本だとテンみたいな動物が描かれてるな read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる