Kotlin 5
レス数が1000を超えています。これ以上書き込みはできません。
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう
※前スレ
https://mevius.5ch.net/test/read.cgi/tech/1531818027/ c#でasnc/awaitを学んだから、そのノリでhogeAsync : Defered<Int>とか量産してたがこれclassic wayで駄目なんだ。
コルーチンムズいぞ。 今までクラス設計するとき、
class Hoge {
fun action1(): Deferred<Int> {
return GlobalScope.async() {}
}
fun cation2(): Deferred<String> {}
}
GlobalScopeなのはいずれどうにかしようととりあえず脇に置いといて、こう設計してたがダメっぽいな?
誰か詳しい人いないの? class Hoge {
suspend fun action1(): Int = coroutineScope {
delay(2000)
return@coroutineScope 1
}
suspend fun cation2(): String = coroutineScope {
delay(3000)
return@coroutineScope "hoge"
}
} C#のasync = suspend って思っとけば大体おk async = suspendみたいのはだいたい分かるんだけど、>>6みたく、suspend関数を大量に用意するのがkotlinスタイルらしいんだけど、
じゃ、クラス設計するとき、誰がコルーチンビルダーでコルーチン作るの?って悩んでて。
例えば、「ライブラリ」として分割するケースを考えてみるとして、まず、REST APIを内部でたたいて結果を返すライブラリを作るとき、
class WebService {
suspend fun action1()
suspend fun action2()
}
みたく、全部suspend関数として外部にpublicなAPIとして公開するの?? で、例えば、更に上のライブラリを内部で使って、キャッシュ機能だとかを提供するライブラリを作るとき、
(androidアプリの開発で見るRepositoryパターン)みたいなライブラリを作るときも
class Repository {
suspend fun action1() { webServcie.action1()など}
suspend fun action2()
}
で、やっぱsuspend関数を公開して、このライブラリを使ってつくるアプリで、
launch() {
repo.action1()
}
でここでコルーチンビルダーを使う??みたいな感じ? ちなみに>>6のcoroutineScope関数調べると、これ新しいスコープ作って呼び出し元からキャンセルできなくなるらしいから、キャンセルできるように
するには
class Hoge {
suspend fun action1(): Int {
delay(2000)
return 1
}
suspend fun cation2(): String {
delay(3000)
return "hoge"
}
}
でいいってことだよね? https://youtu.be/9HUFo4WyDPI?t=2178
見てたら、例でcoroutineScope使ってたな。
英語何言ってるか全然わからねぇけどw
Structured Concurrency云々。
>>6は相当なプロフェッショナルと見た。 非suspendも可能な場合に、suspend版と非suspend版を内部的に両方生成するオプションが欲しい
Kotlin/JS使ってるとJavaScriptのasyncより書きやすい(await相当がデフォだから)けど
それでももう一手欲しいところ kotlinてJavaがなくてもwindowsとMacで動くの? Kotlin/NativeならKotlinコンパイラもLLVMだけが必要でJavaいらないの? いやコンパイラ自体には必要でしょ
初期実装は全部Javaで、今でもかなり残ってる
自社製品のIntelliJがJVM前提だし統合もあるからNativeでのセルフホスティングは目指してないと思うよ やがてコンパイラ自体も Kotlin native でコンパイルできるようになって完全に Java 不要になると思う。 やっと林檎ユーザーに
泥は処理遅くて草
とか言われなくて済むんだね! コンパイラをKotlin native でコンパイルできるようになるのは比較的早くできるだろうけど
IntellijみたいなGUIの総合開発環境をマルチプラットフォームで動かすのをJavaなしでやるのは大変だろう。 ただでさえVSCodeに追われてヤバいのに余計なことしてる余裕ないだろ あ、そーだ。GUIはJavaScriptで書いてブラウザで実行させれば良い。
そのJavaScriptはKotlinのソースからコンパイルして作ったやつにすれば完璧。 いつの間にかこんな入門書が出ていた。但し Kindle 版のみだ(unlimited の人は 0 円で読める)。
速習 Kotlin
http://amzn.asia/d/0ZiG6rB >>37
無理に>>36にて対抗しなくていいからww kotlinのコルーチンビルダーに渡す中断関数がレシーバー付きなのを止めてほしい。
public fun CoroutineScope.launch(
context: CoroutineContext = EmptyCoroutineContext,
start: CoroutineStart = CoroutineStart.DEFAULT,
block: suspend CoroutineScope.() -> Unit
blockパラメータにレシーバつけるんじゃねぇよ。というもの、なんでコルーチンビルダーに渡すルートの中断関数だけCorotineScopeにアクセスできるんだよ。
ルート以外の中断関数からはアセクスできないのに。この非対称性というか特別扱いやめて。 例えば、自分で定義した中断関数
suspend fun hoge() {
}
内ではCoroutineScopeにアクセスできない。CoroutineScopeではなくCoroutineContextにはcoroutineContext関数経由でアセクスできるが。
こういう一貫性のなさはやめてほしい。なんか意味があるのかもしれんが。 >>32のアンケートに自由記載の欄があるから、そこで言うことは可能。 >>39 >>40
CoroutineScopeはキャンセルの伝搬と構造化のためにあって意図的にそうなってる
private funや全体制御クラスなどを除いては基本的に他所に渡しては駄目
渡された側がキャンセルすると子だけでなく親戚関係のものまで巻き込んでしまう
スコープ直下のブロックは保護者のような役割になるので
渡さずに↓のようにしてスコープをネスト構造にするべき
suspend fun hoge() = couroutineScope {
} あけましておめでとうございます
ことりんもよろしくお願いします supervisorScopeって上司っぽさがあるな そもそもcoroutinrScopeを他に渡して何をするつもりなんだろう
用途が思いつかない 「基本からしっかり身につくAndroidアプリ開発入門 Android Studio 3対応」
よく書いてあるようにサンプルが動かないんすけど、
あまりにも初心者過ぎてどこを直せばいいのかわからないっす。
Chapter 4のCalculatorで、正しいコードがわかる方いませんか?
val button = findViewById<Button>(R.id.calculate)
button.setOnClickListener {
var isValid = true
val priceEditText = findViewById<EditText>(R.id.price)
val priceText = priceEditText.text.toString()
if (priceText.isEmpty()) {
priceEditText.error = getString(R.string.price_error)
isValid = false
}
val discountEditText = findViewById<EditText>(R.id.discount)
val discountText = discountEditText.text.toString()
if (discountText.isEmpty()) {
discountEditText.error = getString(R.string.discount_error)
isValid = false
} >>51の続き
if (isValid) {
val price = priceText.toInt()
val discount = discountText.toInt()
val intent = Intent(this, ResultActivity::class.java)
intent.putExtra("price", price)
intent.putExtra("discount", discount)
startActivity(intent)
}
} >>51 遷移先のコードもエラーになります。
val extras = intent.extras ?: return
val price = extras.getInt("price", 0)
val discount = extras.getInt("discount", 0)
val expression = findViewById<TextView>(R.id.expression_label)
expression.text = getString(R.string.expression, price, discount)
val discountedPrice = price * (100 - discount) / 100
val discounted = findViewById<TextView>(R.id.result_label)
discounted.text = getString(R.string.result, discountedPrice) まず大事なこととして
・正確に伝える
・切り分けをしていく
コンパイルエラーなのか実行時エラーなのか想定と違う動作なのか
エラーであればどのような内容か
想定と違うのであれば想定と実際の両方を具体的に
実行可能な場合はログ出力を追加するなどして問題の箇所を絞り込む
技術者は答えより答えの出し方を知る方が大切 AndroidStudio使っててどこがコンパイルエラーかわからないとかあんの? まあぶっちゃけると「エラーが出て動かない」以上のことがさっぱりわからんことはあるにはある
IDEが表示するエラーが理解できるくらいならそもそも入門書など読まんw >>55
なぜエラーメッセージを読まないのか。せめて貼り付けろ >>51に当てはまるかは知らないけど
初心者って初心者向けの本を買うくせにちゃんと読まずに進めるんだよな
手順をすっ飛ばしてるパターンがほとんど >>59
あー文字定義してないのはいかにもありそうだな >>59
Rって、解説書でも唐突に出てくるんすけど、何を定義すればいいの? >>62
そんな解説書は燃やせ
Rクラスはxmlファイルの記述からAndroidStudioが(語弊あり)勝手に作成するリソース管理クラスだ
xmlファイル(に転記するリソース名管理欄)での手動記述がミスってると生成失敗してRクラスなんぞ知らん系のエラーになる
というかとっとと何も考えずに>>63するか餃子のラー油の小袋が半端にしか開かずに必ず指につく呪いにでもかかってしまえ >>64 dくす
エラーメッセージはたくさんありすぎて貼れないから貼ってない
とりあえず自宅に戻ってからまた再現させる
てゆーか、この程度のコードでバグる奴がなんで解説書を出版社から出せるんだよ
まともな解説書ってないのかよ
尼見るともう一冊のほうもサンプルが動かんと書かれていて読む本がない サンプルコードがビルドできたからって何なんだ
そんなの目的にしても意味ない。必要な知識が吸収できればいいわけで。
サンプルコードをそのままビルドするアプローチじゃなく、
一旦空のプロジェクトを新規作成してそこに追加して動作確認するアプローチの方が
勉強になると思うけどなあ 新規作成しただけの状態なら確実にビルドが通るわけで
どこまでサンプルコードに近づいたら
エラーが出るのか問題も切り分けやすい
こういうのはもうAndroid関係ないし向いてないからしね Androidアプリは「初心者の人に書籍通じて独学で覚えさせるのめんどくさいプログラミング技術ランキング」のベスト3常連だからな
なにせファイル1個やコマンド1発で収まらない エラーの見方も分からないレベルでいきなりAndroid本は飛ばしすぎだな 途中コメントアウトしてなんとか動いた
スマン、今日は時間切れ
最後、isEmpty()なんて使えないよ、と言われてたような・・・
続きはまた明日 >>65
ほんとこれ
入門者の立場に立って書いてないからそうなるんだよ >>54:エラーであればどのような内容か
>>55:コンパイルエラーです
>>58 >>63:エラーメッセージ読め、貼れ
>>65:たくさんありすぎて貼れない
プログラミング言語より先に日本語と英語の勉強した方がいい _,,-'' ̄ ̄`-.、 / \
/ \ ,/ \
,/ \ / ― ― ヽ
/ ― ― ヽ lヽ - 、 ! , _ |
lヽ - 、 ! , _ | |r――-、_⊥ ,――'-、 |,-,
|r――-、_⊥ ,――'-、 |,-, |::::::::::::::::/ |ヽ:::::::::::::::|-|'イ!|
|::::::::::::::::/ |ヽ:::::::::::::::|-|'イ!| ト、__,,/: |: `、__,,/ ,|ソ/
ト、__,,/: |: `、__,,/ ,|ソ/ .| 、_ j| _,、 ,|-'
.| 、_ j| _,、 ,|-' | /lll||||||||||l`、 ,|
| /lll||||||||||l`、 ,| `i ,|||' ̄= ̄`|||、 / ト、
`i ,|||' ̄= ̄`|||、 / ト、 「|ヽ|ll||||||||||||||||| /i |::::\
「|ヽ|ll||||||||||||||||| /i |::::\ ::::::\`!!||||||||||||!!' |::::::::\
/:::::\`!!||||||||||||!!' |::::::::::::::::::::::`ー-、.._ i |::::::::::::::\
/::::::::::::::`ー-、.._ i |::::::::::/:::::::::::::::::::::::::::::`ー-、. |::::::::::
/:::::::::::::::::::::::::::::::::::`ー-、. |::::::::::
ロムッテロ兄弟
ハントシー・ロムッテロ ハンツキー・ロムッテロ
1952〜 アメリカ 1955〜 アメリカ できたー!
エラーログは結局見なかった。
モマエらの煽りも十分ヒントなので自力でできた。
要はIDEの使い方がよくわかってなかったってことらしい。
アプリの開発は初体験だったので、IDEがこんなにモッサリしていて
ゆっくり打たないと反応しない、ということがわからなかった。
最初、赤字がエラーを起こしている場所すらもわからなかった。
本の通り入力されているのにエラーになるとか💩すぎる。 Android Studioは割と複雑なIDEだから馴れるまで大変かも、微バグも結構放置されてる
でもどんなときも根性があれば全て解決する Googleが開発環境作るのヘタクソなのはいつものこと
ベースのIntelliJ自体は優秀な子だから嫌いにならないで 入門書のコードもちょっと辛い感じだが
kotlinスレで聞いてきたりレスの感じからすると記載を読み飛ばしてるだけな気がするな… エラーメッセージを読まないような奴が本の解説を読んでるはずがない >>78
>できたー
できてない
>モマエらの煽り
いまは心底馬鹿にしている
結局原因は理解せず対処法を学ぶ気もなくて今後似たようなことがあって詰まっても本を罵るだけなのだろう
お前はなにか変わった? >>できたー
>できてない
ワロタ
相手の態度が気に入らないのはわかるが。 例えサンプルが間違っていても自分で間違いを見つけ修正するくらいの気概がないと、動きが速くカオスなAndroid開発環境に立ち向かうことはできないだろう そうはいうてもインストールが正しくやれたか、ライブラリは合っているかを確認したいんだから動くコードじゃないとアカンやろ エラーを見るのは基本中の基本だとこれだけ言われながら頑なにエラーを見ない理由が分からないw
それはそうと、Android StudioがもっさりするレベルのPCで開発するの辛そう 真面目なアドバイスだけど、アプリ開発というかプログラミングをするならそれなりのPCを用意した方がいいよ。
本格的に開発するなら各種ツールを同時に起動しながらやることになるから、IDE単体でもっさりするレベルのマシンだとかなり辛いと思う。 ゲーミングPCからグラボを省けばプログラミングに良いマシンになるだろう
要はCPUとメモリとSSDだし >>94
そんな感じのスペックのやつを自作するしかないのかな?
>>95
丁度いいのある? AVD使うならグラボはあった方がいい
ローエンドで十分だけど 初心者用の本ってマジでろくなのないな
自分が読んだ本だと言語の仕様解説して、次の章でいきなりじゃんけんアプリ作りましょうだもんな
文字出すだけとかもちょっと地道なサンプルこなしてからにしてくれよ >>101
君が書け。紙の本にする必要はない。AmazonでKindle用の電子書籍で出すなら多分すぐ出せる。 >>103
それでは誰も使わなくなって終わるではないかw 本を読んでからアプリを作るんじゃなくて、アプリを作ってから本を読むんだ 本を読んで勉強するという姿勢が気に入らない
お前の目的は言語学者になることか
アプリが作りたいならまず作れ
それで行き詰まったら初めて必要な知識を調べる >>108
飲み会ドタキャンされて暇だからエラーの内容を貼ったら教えてあげるかもしれない
とりあえず一年以上前の記事みたいだからバージョン違いの何かな気がするけど Android Studio3.0とか原始時代のツールだろ 1ヶ月以上たってまだ100レス程度ってkotlinで開発してる人はんと少ないんだな flutter for xamsrin for kotlin nativeが待たれる なにこれ。flutter sdkをc#に変換するのか。すげぇな。つか、xamarinの名前冠するなよ。負のイメージしかねぇ。 ザマリンてなんか医薬品みたいだよね
「風邪にはザマリン!! お近くの薬局でお求めください!」みたいな ていうかふらったーの1番のネックはDart言語なのに、それを多言語に変換されてもって感じだな
方向が逆だ え?だから他言語のC#に変換してDartとおさらばできるってことだろ。 僕の名前はXamarin! 僕の名前はKotlin! 二人合わせて...? kotlin界隈にもちょまどみたいなアイドル欲しいなぁ おまえがVtuberになってアイドルになればいいじゃないか koilin入門書には、作者が分かっていないのかjavaの文法が混じって分かりにくい
ごちゃ混ぜで混乱必至
結局kotlinlang.orgしか信用ならん Kotlin class destroyerって使ったことある人居る? >>132
検索してフイタwww 日本語の読めるやつには居ないだろうなwwwww これから本を出す人は、SwiftとKotlinを同時に学べるような本を書いてほしいな SwiftとKotlinは書き方が似すぎてて紛らわしいから、
どちらかの書き方が染み付くまでは同時にやらないほうがいいと思う Go->Node(TypeScript)->Rust->Scala->Kotlin
去年の年末から色んな言語に入門してHelloCRUDしまくってたけど
やっと本命見つけたわ。これは流行るで。ほんま。 >>139
フレームワークはSpring? Ktor? Sparkも良くできてるから選択肢に加えてあげて
日本だと空気だけど海外の事例だとめっちゃ使われてる Sparkは名前変えろ
Apache Sparkと紛らわしいから絶対に流行らん >>138
紛らわしいけど、両方同時に学べる人に書籍が必要とは思えない。 >>142
これ。まじでこれ。
ググラビリティ低すぎて辛い。 ITにいて Apache Spark 知らないとかアホ丸出しだから作者が Spark なんて名前を付けている時点で不安になるのが当然で、普通は避ける
それなのに Spark 使ってる奴はそいつも Apache Spark を知らない可能性が高く、同様にアホ丸出し >>147
作者が知らないも何もApache Sparkの方が後発だし、その頃にはSpark Frameworkは今さら改名できないくらい広く使われてたぞ >>147はアホを丸出しにしてみたかったのかも知れない。 android studioで、それぞれ以下の行を追加
actibity_main.xml
android:id="@+id/back"
MainActivity.kt
import android.graphics.Color
import android.widget.LinearLayout
val background = findViewById<LinearLayout>(R.id.back) as LinearLayout
background.setBackgroundColor(Color.parseColor("#FF0000"))
で、画面が赤くなると思うんだけど、アプリが起動直後に停止してしまう。
background.setBackgroundColor(Color.parseColor("#FF0000"))
の行をコメントにすると普通に起動する
本当はラジオボタンで選んでバックグラウンドを変える処理だけど、抜き出してやってみてもうまくいかない 流行るわけないとか言ってるあたり、マジで最近出てきたフレームワークだと思ってたんだろうな
Javaのマイクロフレームワークとしてはほぼデファクトなのに >>152
エラーメッセージに答えが書いてあると思うよ >154
コンパイルは普通に通り、ワーニングも出ない
ただ、アプリは起動直後に停止してしまう。
デバッグ用のスマホが悪いかと、別の機種つないでみても同じく起動直後に停止して
MyApplicationが停止しました
と表示される なんでAndroidスレで聞かないわけ?
エラーメッセージ読めないのと一緒なの? 所謂おまじないはともかくとして
入門書や入門サイトが最初に教えるべきは println と throw RuntimeException() だと思う
最初に転び方だわ ありがとございます
すこしスレチみたいなので、こっちでもう少し調べてみます。 >>158
ちょっと暇だから相手してやるよ
ほんとに LinearLayout 使ってる?最近の環境で新規アプリ作ったら ConstraintLayout だと思うんだけど
たぶんここが
val background = findViewById<LinearLayout>(R.id.back) as LinearLayout
こうだ
val background = findViewById<ConstraintLayout>(R.id.back) ちょっと面白いと思ったのは、ConstraintLayout に対して
val background = findViewById<LinearLayout>(R.id.back) as LinearLayout
background.setBackgroundColor(Color.parseColor("#FF0000"))
これだと val background = 〜の行で ClassCastException で落ちるのに、
background.setBackgroundColor をコメントアウトすると落ちずに普通に動いちゃうのね
これは background が使われないなら background へキャストして代入する処理自体を kotlin が無効化しちゃうのかな いろいろな意見を参考にやってみました
原因
コンパイルエラーは出なかったけどIDが変なところをさしていて、カラー情報を書き込んだ瞬間に落ちていました。
対処1
actibity_main.xmに
android:id="@+id/back"を消して
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/back"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
を追加
対処2
MainActivity.ktの
<LinearLayout>の代わりに
<android.support.constraint.ConstraintLayout>
2通りの方法でうまくいきました
import android.support.constraint.ConstraintLayout
をimportすると、
>159の<ConstraintLayout>だけでOKでした
ありがとうございました >>161
>>154のエラーメッセージ >>157のRuntimeException >>160のClassCastException
これらはどれも実行時エラーのことで、それを表示する方法や読み解き方をググるなりした方が良いと思うよ
今後のためにね Ktorええよな、今作ってるAPIサーバーで使ってる。
Webアプリにはあんまり向かなそうだけど 昔、古都ひかるってAV女優が好きだったの思い出した >>165
Webアプリしようと思ってKtor勉強中なのだが、向いてないのか... 今から考えればそうだが
昔はあんなのでもレベル高かった気がする
あの頃のやつだと河井さくらとかいう人が文字通り面白かったし水野栞も良かった
今は顔面偏差値すごい底上げされてて嬉しい >>171
Ktorでももちろん作れるけど、ログイン前提のWebアプリを作るなら自分で作らなくちゃいけない部品が多い。
大人しくSpring使っておけばそこらへんは全部用意されてる。 >>171
Ktorはいわゆるマイクロフレームワークに分類されるフレームワークだから、ガチガチのWebアプリを作るのはめんどいよ
まあ認証やらセッション管理やらDBやらのことだから最初に一度作ってしまえば後は別に面倒なことはないけど >>165
いいよね。SpringBootと棲み分けできそうやし。
ところでどんな構成(アーキテクチャ)で使ってる?
ワイはもうKtorならRepository無いほうがええような気がしてきてるんやが。 https://ideone.com/Xghedx
ExposedではUserTable2に便利メソッドが生えるのでRepository分けても委譲とentity変換ばっかりになりそうだったから
それならModelクラスと同じ場所に置いて、DB変更時にミスりにくい方がいいかと思った。
こんな構成で作ってみてるんだけど、どう思う? >>177
その割り切った作りはいいと思う。特にチームが大きく無いならメリットの方が多いんじゃないかな。
俺はAPIサーバーと連動するプログラムも同時開発してて、共有できるものは共有してさせるためにクリーンアーキテクチャにしてるからrepositoryも含めてクラスはやたら多くなってるけども。 >177
Ktorみていて、データベース接続部分がないような気がしていたけど、やっぱりExposedを使うのか. >>178
そしたらちょっと作りきってみるわ。ありがと。
>>179
Kotlin製で統一しようと思ったらそうなるね。 >>179
ExposedでもMyBatisでもなんでもお好きなものをお使い下さいってスタンスだな
めんどいから標準で何か入れてくれるような仕組みがあれば楽なんだけども ぐぐらびりてぃって日本だけかと思ってたら海外でも普通に使われてるのな
google(検索する)って動詞とセットで辞書に載っててわろたわw むしろ日本よりも英語圏での方がよく使われてる気がする
海外のフォーラムとかで普通に見る んじゃヤフーでググれもあながち間違いじゃない?
ソニーのファミコン的な 大体レイアウトとロジックが混在してるのは良くないねってことで
レイアウトはxnlファイルに分離するようにしたんだと思うんだけど
何でAnkoってまたレイアウトとロジックを混在させるようなことしてんの
時代に逆行してるだけでは >>191
アーキテクチャ上重要なのはビューとロジックの分離
一方で、レイアウトとロジックの分離というのはビューに閉じた話であり、
マークアップエンジニア(笑)とフロントエンドエンジニア(笑)の分業をしやすくするだけのものでしかない
フロントエンドエンジニアが十分有能でマークアップエンジニア(笑)の仕事も自分でこなせるなら分ける必要は全く無い レイアウトの中にロジックがダラダラ書かれたら見通し悪くてUnkoだけどそこは経験とコード規約とレビューで制御できる
適正なメソッド分割は主に人間の仕事であってライブラリーの責務ではない
XMLの欠点とDSLの利点はGitHubのWikiで説明されてる
設計開発にイチイチXML使うのは微妙じゃね?DSLとかいいよな!ってのは時流でもある
だから少なくとも時代に逆行しているだけということはない 気になってるんやがkotlin nativeが完成したらgoは駆逐できるんやろか。
それともシングルバイナリやら並列化でgoのメリット残るんやろか。 >>200
現実的に考えると、全く話題にもならずにひっそり消える可能性が一番高いよ
kotlin nativeが マジかあ。Scala状態は残念やのー。
俺にキラーアプリ作れるような力があればなぁ。。 githubでkotlin-native使ってるプロジェクト探してみたけど、確かにあんまり盛り上がってる感じではないね。
今作ってるクソアプリが一段落ついたら何か作ってみよう。 「オーケーグーグル、エロくて楽しいアプリ作って」でエロくて楽しいkotlin nativeアプリのソースが生成されるAIを作れば流行る Kotlin/Native自体は現在進行中のSubstrate VMが出来上がるとやや辛い立ち位置になる
でもKotlin全体としては間接的にエコシステムが大きく強化されるし
Kotlin/Nativeから「Kotlin with Substrate VM」への移行は
性質的に割と容易なものになる期待もあるから使っても大丈夫だと思う
補足だけど Substrate VM はOracle主導のオープンソースプロジェクトGraalの一部で
JavaバイトコードをAOTするもの、
これによりjavaパッケージが使えるKotlin/JVMのままネイティブ化出来るようになる
Linux向けは出来ていてWindowsやiOSなどはまだこれから ちなみにAndroid Runtimeも同様にAOTしている
こっちはJDKをGoogleが好きなように取捨選択してるのでJava互換性テストは通らない
Android Runtimeの技術を利用してJava(Kotlin/JVM含む)からiOS用のネイティブを生成してるのが
RoboVMやMulti-OS Engine
Substrate VMはこれら(Kotlin/Native含む)に対して
後追いだけどOpenJDKフルサポートのAOT、ということになる
出来上がるまでまだかなりの時間が掛かりそうだけど 結局Java版Xamarinを作ろうとしてるだけだな
目的不在で技術だけが独り歩きしてる感すごい >>200
無理だね。というかそもそもGoの得意分野とKotlin(native)の得意分野がかぶってないから現時点であまり競合してない >>209
そうなんか。kotlin nativeの得意分野って何なんや? >>208
Graalの主目的はHotSpotのJITコンパイラ(C2)の刷新
20年以上前に設計され、修正が積み上げられたC++コードなので
保守し辛く新技術の導入も困難とのこと
JITコンパイラ(Graal本体)はインタプリタやAOTとも関連が深く、
それらも考慮したエコシステムとしてサブプロジェクトを内包してる
Truffle / Sulong / Substrate VM >>210
Kotlinの対応プラットフォームを広げるものだから
強いて言うならKotlin/JVMと同じく通常アプリでは
Goは並列処理や低レイテンシGC(リアルタイム用途)など
システム寄りが得意 Kotlin nativeは悪く言えば現状では得意分野などはっきり言って存在しないし、良く言えばこれから何に使ってもいいとも言える
Goの代わりに使うことももちろん可能 Ktor以上に急上昇してるJavalinってFWお前ら使ってる? >>214
使ったら竜騎士とかにクラスチェンジできるかな マジで聞いたことすらなかった
悪くなさそうだけど、英語も含めて情報が少なすぎて趣味以外には使えないかな 軽く調べた感じだからよく分かってないんだけど、これ例えばSparkと比べて何が良いの? Kotlin を今のプロジェクトに使いたいけど、eclipse とか言う糞IDE使ってて相性悪すぎて笑えない
SWT とか JFace とかでUI作ってるから、eclipse を外すのは無理だし >>216
宇宙刑事っぽさもあるし、使うと風呂釜が綺麗になって身体が芯からあたたまりそうな感じもする >>219
UI作るときとことりん書く時でIDE使い分ければいいんでないの? >>221
すまん、それ気付かなかった。
後で見てみるわ リン付ければなんでも可愛らしくなると思いやがってそうはいかねえぞべらんめえ ←江戸っ子 上でシステム系にはGoみたいに書かれてるんだけど、kotlin/nativeはGoより遅いのかな。
現状ではそうなのかも知れないけど、最終的にはGoと同等の速度が出せるポテンシャル(仕組み)だと
思ってるんだけどそうでもないの? Goに比べたら遥かに複雑怪奇な言語だから最適化は不利だろう
JVMの挙動をエミュレーションするための無駄な処理は少なからず必要だろうし 1 c
2 go
5 jvm
10 script系
3くらいいける? >>232
構造的に無理
Goは構造をシンプルに保って高速軽量を維持するために言語仕様を必要最低限にしてるから、
書く人間の使いやすさを追求してるこちょりんとは根本的に目指してるものからして違う >>235
いけると思う
JIT後はJVMが1〜2だけど なんでRustはあんなに速いん?言語の抽象度は同じくらいやろ? >>238
根幹の言語機能の所有権とライフタイムにより
C++でのムーブセマンティクスやRAIIみたいなのをより高度にコンパイラが認識出来るので
速度(効率)を保ったまま安全性を高められてる Goはフットプリントも小さいからな。
C++だと、iostreamを静的リンクしただけでもそこそこ大きくなるのに。 上で1..10の速さ書いたんやけどあれは実測じゃなくて速さランクのイメージや。
go<kotlin native<<jvm<<壁<<script言語
こうなるなら納得なんやけど、現実には
kotlin native ≒ jvmなの?
最適化されたらgoに迫ると思い込んでるんやけどそんな甘くないんかな。 最適化できたらそらそうだけど、その最適化がどこまで出来るかどうかはお天道様にしか分からない それもそうやね。大人しく半年か1年くらい待ってみるわ コンパイラの頑張り次第で Go ≒ Kotlin/Native まで行ける可能性はある
ベンチマークでは C ≒ Rust << Go ≒ JVM
Rust vs Go https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/rust-go.html
Go vs Java https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/go.html
しかしGCの性質の違い、JVM起動時間、JIT、並列処理サポートなどにより
各ユースケースに対する適性は速度だけでは決まらない 3桁ごとにカンマ打つには、
val str= "123456"
println( str.format("%,d"))
想定では、123,456のはずが123456になる
使い方間違ってるかな? 逆+Intでないとダメみたい
BigDecimal放り込んだら勝手に12,345.6789みたいになればと思ったんだけど、自分で作るの面倒で信用ならん jvmならNumberFormatでいいんじゃないの
import java.math.BigDecimal
import java.text.NumberFormat
val BigDecimal.fmtStr: String
get() = NumberFormat.getNumberInstance().format(this)
fun main(args: Array<String>) {
val a = BigDecimal(12345.6789)
println("${a.fmtStr}")
} >249
"."探して、整数と小数点以下に分けて整数部分にカンマ打ってから合体させようとしこしこ作ってたら別のアイデア出てた
ありがと locale によってはカンマが3桁区切りではないかも知れないし記号がカンマではないかも知れないので
こうやって自分でやっちゃった方が良いのでは?
println(java.text.DecimalFormat("#,##0.000").format(java.math.BigDecimal("1234567890.1235"))) // 1,234,567,890.124 >>251
ロケールに従わず常にカンマにしたいという意図ならそれだとそぐわないと思う
DecimalFormatに与えたカンマはカンマという文字ではなくグループ区切り子なのでロケールに応じた文字で出力されるよ 日本, アメリカ, イギリス 他
1 = 1.000 < 10 < 1,000 = 1000
ドイツ, イタリア 他
1 = 1,000 < 10 < 1.000 = 1000
ロシア, フランス 他
1 = 1,000 < 10 < 1 000 = 1000
オーストラリア, カナダ 他
1 = 1.000 < 10 < 1 000 = 1000
国際単位系(SI)
1 = 1,000 = 1.000 < 10 < 1 000 = 1000
空白を小数区切りに使う国が無いことと、ポイントとカンマの各国のばらつきから
読み取り間違いを避けるための妥協案のようなもの おまけ
Ruby, Java, Kotlin 他
1 = 1.000 < 10 < 1_000 = 1000
C++
1 = 1.000 < 10 < 1'000 = 1000
アンダースコアをユーザー定義リテラル用に使っていたため そうか。じゃあグループセパレータを自分でカンマにセットしとかないと確実にカンマにはならないってことだな。 Java全然書いたことないんだけどJavaのこと調べてたらこの言語に辿り着いた
Android公式言語とのことだけど、Androidアプリ開発以外の用途でJavaでやることもKotlinで出来るの?
もうJavaじゃなくてKotlin学んだほうがいい?
PythonとCしか書けない >>256
> JavaでやることもKotlinで出来るの?
できる。
> もうJavaじゃなくてKotlin学んだほうがいい?
JavaをやってからKotlinを学んだほうがいいけど、PythonとCができるなら、Kotlinから始めるのもありかも。 >>256
APIリファレンス読むためにJavaのメソッド定義の構文を知っておくくらいで
Kotlinをメインに学んで良いと思うよ
成果物はJavaクラスファイル(※)なので出来ることは同じ
やろうと思えば1プロジェクトで混在しても普通にお互い呼べる
※Kotlin/JS, Kotin/Nativeとかの別形式もある 使われてるところでは安定して使われてるみたい
拡大は止まったと思うけど scala組がkotlinに合流してくれたら覇権言語狙えるんやないか。
ということは、kotlinに必要なのはお洒落感? Scalaやってた意識高い系はみんなとっくにRustへ移行した >>256
それをJavaで作る必要があって、Javaで作ることを誰かに強制されているなら、それはJavaで作る
それをJavaで作る必要があって、Javaで作ることを誰にも強制されてないなら、それはKotlinで作る
それをJavaで作る必要がないなら、JavaでもKotlinでも作らない。他の言語を使う。めんどくさいじゃん ちょっと前はScala民がやたらKotlinを叩いてたけど、それももう見なくなったな 言語に自己肯定感を求める人は無難無個性言語Kotlinや低脳言語Goでは欲求が満たされないことを知りRustへ行った >>267
両方とも同時期に流行り始めたけど、用途的にあんまり競合してない希ガス おれもどうせならオシャレな言語がいいんだがスマホのアプリ作りたいならkotlinしかないよね? >>270
あなたの言うスマホアプリがゲームだけであるなら、Unityを使うことができる
これはWindowsマシンでAndroidゲームもiPhoneゲームも作ることができる(iPhoneの実機はあったほうがいいけど)
あなたの言うスマホアプリがiPhoneアプリであるなら開発マシンはMacでiPhoneは必須、個人なら言語は公式のSwift(就職する気なら今からObjective-Cに手を出して時間不足で爆死しよう)
Windowsマシンでも作成だけはできるがユーザーの「よくわからないけど動きません」に対して「よくわからないので直せません」と答えるしかなくなる(所詮エミュ)
あなたの言うスマホアプリがAndroidアプリである場合のみ、Windows(別にLinuxでもMacでもいいけど)でKotlinを使うことで作ることができる
ゲームを作ることももちろんできるが、基本的に全部自力での実装になるので序盤から山が高いし若干面倒くさい(後々勉強にはなるが)
手間と面倒だけ考えるならUnityとC#でやったほうがサンプルも解説も書籍もライブラリも山ほどあるし楽は楽、詰まってもだいたい先人が解いてるのでイージー。タイムイズマネー
もちろん他の言語で作ることもできて、たとえばもしあなたにC++の知識があるならC++でゴリゴリ作ることもできるんだけど、そんな人はこんなこと聞かないよね
えっXamarin?ごめーん忘れてた。「もしあなたがいっぱしのWindowsアプリケーション開発者であるなら」その知識とXamarinとC#と.NETを使うことでAndroid/iPhoneアプリ開発ができるよ >>268
それぞれちょっとずつカジってみたんだけどScalaの人がRustでファイナルアンサーするとは思えんかった。
RustはWebやるにはキツかったからまだどっかで彷徨ってるのかも。
>>269
現在のGoの用途→Webサーバ、Nativeアプリ
JetBrainsが思惑ってるKotlin, Kotlin/Nativeの用途→ Webサーバ, Nativeアプリ、というか何だか色々。
うまく行けばこれから競合していくんかな。 >>275
Goもこちょりんもどちらも使うけど、一口にWEBサーバーと言っても得意なジャンルが違うな、少なくとも現時点では。
今後GoにSpringみたいなフルスタックのフレームワークが出てきたら思いっきり競合するかもね。 実際、Goの運用性とKotlinの生産性が合わさればわりと最強だと思う
Kotlin nativeみたいにKotlinのエコシステムを再現する方向だとどうしてもJVMをエミュレーションするような感じになって歪みが出る
逆にGoの文法をKotlinに寄せるほうが筋がいい >>279
逆に聞くが、仮に完全にゼロベースで Kotlin native を開発してたとして、今と同じ言語仕様になったと思う?
特定の処理系を前提にして作られて普及した言語が他へ移植されて成功した例はない 横からだけどjvmの負の特性も引き継ぎやすいってことかと思った。
起動が遅いとか、メモリ食うとか。 起動が遅い事は遅いが昔からすれば今時のPCは速いね。
Windows95や98の頃なんかどうしてくれようというほど遅かったからなあ。
昔はみんな忍耐力強かったよなあ。 >>280
確かにJVMのジェネリクス型消去がなかったら、reifiedみたいな複雑怪奇な仕様はなかったろうな。
移植については大抵は非公式移植事例だから、楽観はできないけど、まだ決めつけるには速いかと。
Scala.NET...うっ、頭が... 新しいところでいうと、inline classなんか普通にユーザー定義の値型があれば全く必要ないな
unsigned integerもだいぶ無理矢理感が酷い
Kotlin native特有の話だと、C interopのための構造体のマッピングとか超無理矢理で最高にエイリアン感ある iPhoneにおけるSwiftの立ち位置=AndroidにおけるKotlinの立ち位置 inline class = ユーザー定義の値型 = C#のstruct
そして最適化が十分ならそれらが必要無いことをRustとGoが証明してる
ヒープかスタックかは自動で判断される 特定のVM前提で設計されて他へ移植されて成功した言語の例としてはAndroidのJava/KotlinやUnityのC#、Node.jsのJSあたりが該当すると言えなくもないけど、
それらは言語の移植ではなくVMごと移植だからなあ
基本的にVM言語の他への移植は成功しないよ AndroidやC#のいくつかのターゲットはAOTで
それらも「VMごと」に含むなら
LLVMを使うC++(Clang)も同じ扱いになる 最近、kotlin触ってるけど、C#より学習コストが高いです
それで、C#erがkotlinに切り替える際に、意識すべき点って何かありますか? >>291
Javaの制限を理解すること
JVMは.NETのCLRに比べて機能的にはずっとショボくて、その制限に由来する奇妙な仕様がKotlinには数多く存在する
Javaに慣れてないとそのあたりは直感的に理解しづらい >>292さんの言ってる「Javaの制限」て例えばどんなこと? >>291
プログラム言語全般に言えることだけど
各構文を概要程度でも良いので、まずは一通り知ること
C#知ってて引っ掛かりそうな箇所として思いついたのは
・最後のパラメータがラムダの場合は丸括弧の後に書ける
他に引数が無い場合は丸括弧も省略出来る
(GroovyやSwiftのTrailing Closureと同じ)
・レシーバ付きラムダ
・inlineラムダ
・returnはfunから抜けるもので、ラムダから抜けるものではない
・IterableとSequenceは遅延評価
・コンパイルでジェネリクス情報は消える
・suspendは同期(await)が基本動作 >>294脱字
× ・IterableとSequenceは遅延評価
〇 ・Iterableと違ってSequenceは遅延評価 kotlin勉強中なんだけど、結局のところjetbrainsがscala推さずにkotlin出したのは何でなの?
商業的に旨みがあるから?それともbetter javaとしてのscalaに見切りをつけたから?それとも? >>296
自分でScalaやってみればすぐにわかるよ
まともな感性があれば、あんなものが普及するわけがないことは明らかだった
JetBrainsもIDEを作る会社として自由にできる言語が一つは欲しかったというのはもちろんあっただろうけどね >>296
なるほど。Scalaのこれ以上の普及は難しいという判断があった(だろう)ってことなら納得。 まちがえた。上は >>298
雑念を捨ててkotlin邁進してきます なんだかんだでscalaは採用企業多いけどね
kotlinもtwitterとかpaypalみたいな大手で使ってくれると宣伝になるんだけど 日本のYahooがKotlin採用したくらいではさざなみさえ立たないか Scalaの方が出たのが早かったし意識高い系(笑)が挙って使ったから
でもそれを維持出来る新人たちが居ないのが現状
Scalaは端的に複雑で難解な部分が多い
2018年後半以降Scalaの記事殆ど見かけないやろ?
コップ本(笑) Androidの公式言語がScalaになる世界線もあり得たと思うけど、そうならなかったってことはつまりそういうこと 一年くらいScalaで仕事してたしまあ慣れればどうってことはないと思うけど、ScalaとKotlinで選べるとしたらよほどの変人以外はKotlin選ぶと思うわw ScalaはHaskellを意識しすぎ
簡潔に書きたいだけならKotlinかClosureの方がいい Scalaのコンセプトは、スケーラビリティの理論実証
オブジェクト指向と関数型の統合によりスケーラビリティが実現すると考え
小規模から大規模まで同じ書き方/考え方で記述出来るように設計されている
出自はコンピュータサイエンスの学者
Kotlinのコンセプトは、より良い産業向け言語
Javaからの移行や相互運用、コンパイル速度、使い勝手について
「仕事の道具」であることを意識して設計されている
出自はIDE製品を提供する企業 設計思想と既存資産があるから多様に派生し人が集まる
C, C++, Objective-Cが合流しないのも同様
それを我田引水と評することに何の意味もない scalaでAndroidのプラグインとかあった気がする
我田引水ってなんか意味わからんな >>309
むしろ我田引水でない言語なんかあるんだろうか。
強いて言うならgrassとかwwww 我田引水ってのは共用物について不正に占有したり自らの便宜を図ったりするような場合を言う
自己アピールや競争を含めた利己的な行動すべてを我田引水と揶揄するのは農耕民族的な発想が過ぎる
そういうのは道徳というより村八分や出る杭が打たれるのを恐れる面が強くイノベーションの足枷 後ろ盾がjetbrainsっていうのはどうなんやろ。
大手と比べてどんなメリットデメリットあると思う? >>318
googleと仲いいしintellijシリーズが売れなくなるとも思えんし安泰なんじゃ? >>318
大手と比べるとメリットはない。後ろ盾のない言語よりはいい。
IDEの開発会社という意味では、言語の普及がIDEの売上に直結する可能性があるので
Oracleみたいに独立不採算だからマネタイズに走るという思考にはなりにくいが、
絶対的なものではない。 IDEの開発会社であるが故のリスクもあるけどね
VSCodeのような強力な他の開発ツールがKotlinサポートにおいてIntelliJを超えてしまってユーザーが流れた場合、
JetBrainsにとってKotlinの開発を続けることにもはや意味がなくなってしまう 後ろ盾の強さでいったらGoだべ
あれだけの巨大企業がついてる上に、開発も独裁せずに異常なまでにオープンであることを重視してるし >>326
最強のSEO力でそう見せてるだけだぞ
それでもDartに対するヘイトは抑えきれなかったようだが >>327
直接Go開発周りのディスカッションを見てきての感想だから、SEOも何も関係ねーよ
英語が読めるなら自分の目で確かめることをお勧めする
あれはある意味理想的なOSS開発の形かもしれない goは好きじゃないが>>326の言うことには同意
でもDartちゃんは駄目だから早く眠らせてあげて… FlutterがDartじゃなければ一気に覇権を取るまでありえただろうにな Android次期OSの開発言語がDartになるみたいな話どうなったん >>337
小鳥ん島
>>336
揚げ足鳥で悪いが、目標は達成するものだと思う。 ランキング画面を作っていてRecyclerViewの項目のソートをしたいんですが、
Cellectionをお気に入り数の降順でソートした上で、
タイトルとサブタイトルの昇順にソートするにはどうしたらいいですか
以下でお気に入り数の降順でソートするところまではできたんですが。
RankingDatas.sortedByDescending { it.bookMarkCount } 俺だったらデータを抜いてくる時点でソートをかけて抜いてくる。 APIレスポンスはそうして返してるんですが、
ローカルでお気に入りオンオフしてランキング順位が変わった場合に
再度APIを叩いてデータを取り直すのも微妙なので
その場合はローカルでソートして
順番を入れ替えたいという感じです ドキュメントにこう書いてあるからascendingとdescendingを順次呼び出せばいいんじゃない?
The sort is stable. It means that equal elements preserve their order relative to each other after sorting.
呼び出す順序はソート優先順位の逆順で rankingDatas.sortedByDescending { it.bookMarkCount }.sortedBy { it.title }.sortedBy { it.subTitle }
やってみましたが、途中の結果は捨てられて単に subTitle の降順になるようです 呼び出す順序はソート優先順位の逆順でと言ったのに伝わらなかったか 「kotlin sort multiple fields」で検索! 久しぶりに触ったらcoroutineがだいぶ変わってるらしくて以前からとりあえず動くけどよく分かってない状態だったのにもう全然分からないよ……(´・ω・`) >>352
とりあえず前知識として「コールバック地獄」について知っておくといいかも >>351
のリンク先で、数値なら、- で降順にできるのか?
list.sortedWith(compareBy({ -it.age }, { it.name }, { it.address }))
Ruby なら、
arr2 = arr.sort_by { |a| [ -a[:score], a[:room] ] } ま、しかし、複数項目で昇順降順が混在する場合は自分で Comparator 作っちゃった方が楽かもね。 いやいや rankingDatas.sortedBy { it.subTitle }.sortedBy { it.title }.sortedByDescending { it.bookMarkCount } でいいじゃん >>362
10万件ソートするなら使えないし、1000件しかソートしないなら問題ない
ランキングならたいした件数ないんじゃない >>360
それって2番目の並べ替えで1番目の並べ替えの順序が変わらないことは保証されてるの? mutableLivedataを外部に公開したら良くないってことで
別途livedataを作ってそいつに参照を持たせて
外部にはlivedataだけ公開するっていうのを
全部のmutableLivedataに対して行うの面倒臭いんですが
なにかいい方法ないですか よく知らないけどmutableLivedataをコンストラクタで貰って
それを元にlivedataを作って両方保持するクラスでも作って包めばいいんじゃないの それで何か解決するんですかね
結局view側からmutableLivedataに
アクセスできるんじゃないですかね 本当にやり方が思いつかないならもうちょっと経験値の高い先輩なりに相談してみよう 分からないならレスしないでください。うざいだけです 動かしてないけどこんな感じ
import android.arch.lifecycle.*
import kotlin.reflect.KProperty
//保持用
fun <T> unmodifiableLiveData(d:LiveData<T>): LiveData<T> = Transformations.map(d){it}
class MutLiveWrap<T>(val lv:MutableLiveData<T>) {
val readonlyLv = unmodifiableLiveData(lv)
operator fun getValue(thisRef: Any?, property: KProperty<*>) = readonlyLv
}
val <T> MutableLiveData<T>.wrap get() = MutLiveWrap<T>(this)
//使用
class Test {
private val aWr = MutableLiveData<Int>().wrap
val a by aWr
fun f(){
val mutLv: MutableLiveData<Int> = this.aWr.lv
val roLv : LiveData<Int> = this.a
}
} >>370
技術力がないだけじゃなくて人間としても終わってるのな 荒らしに返事するな!
そいつは前からいる、荒らしだろ。
相手をすると、この板に居つくだけ! ま、しかし、このスレの場合は日頃は過疎ってるのでたまに荒しが来てくれた方がスレが活性化して落ちる心配がなくなるなw developer.android.comの最近のページはコードサンプルがKotlinとJava両方載ってるんだね
タブで切り替えるんだけど最初に表示されてるのはKotlin 俺も動かしてないけどつくってみた
import androidx.annotation.MainThread
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
private class ReadOnlyLiveData<T>(private val liveData: LiveData<T>) : LiveData<T>() {
override fun setValue(value: T) { TODO("この関数を呼び出したとき、リードオンリーだから使えないよって教える。") }
override fun postValue(value: T) { TODO("この関数を呼び出したとき、リードオンリーだから使えないよって教える。") }
@MainThread override fun observe(owner: LifecycleOwner, observer: Observer<in T>) { liveData.observe(owner, observer) }
@MainThread override fun observeForever(observer: Observer<in T>) { liveData.observeForever(observer) }
@MainThread override fun removeObserver(observer: Observer<in T>) { liveData.removeObserver(observer) }
@MainThread override fun removeObservers(owner: LifecycleOwner) { liveData.removeObservers(owner) }
override fun getValue(): T? = liveData.value
@SuppressWarnings("WeakerAccess") override fun hasObservers(): Boolean = liveData.hasObservers()
@SuppressWarnings("WeakerAccess") override fun hasActiveObservers(): Boolean = liveData.hasActiveObservers()
}
fun <T> LiveData<T>.readOnly(): LiveData<T> {
if (this is ReadOnlyLiveData<T>) return this // もうすでにリードオンリー
return ReadOnlyLiveData(this)
} >>357
降順と昇順が混在する場合は compareBy または compareByDescending で Comparator 作って
それに対して thenBy または thenByDescending で追加させて行く方が楽だし速いと思う。 AnkoでBottom Sheetって使えますか? >>384
SequenceはIterableとほぼ同じ
違いは
Sequence: 遅延評価する (なのでジェネレーターも含む)
Iterable: 基本的には遅延評価でない (通常、実体はコレクション)
拡張関数も別れていて、例えば
Sequenceのmap は遅延評価するSequenceを返す
Iterableのmap はその場で全要素を処理してListを返す げ、知らなかった。
ずっとIterableがStreamの代わりだとばかり。
PythonのSequenceと混同してた。
ならば、Iterableをあそこまでゴージャスにする必要があったのか? >>388
典型的なコレクション操作では遅延評価せずその場で全処理する方が早いため
意味付けが違うだけで、SequenceとIterableは同じ拡張関数を持ってるくらいの認識でOK
分かりやすさのため、あえて使い分けを用意しなかった
Javaの割り切り方もありだとは思うけどね SequenceはJava8のStreamと類似で、KotlinであえてStreamを使うべき機会はほとんどないからSequenceを使っておけば良いってことかな そしてSequenceって変数にぶち込んで使いまわせなかったっけ? partitionのSequence版が無くて自作したわ
groupingByも遅延評価だけど使い方がむずい(毎回リファレンス読み直す) >>391
pararellがないな。
はっきり並列化できる処理なら、Streamの方がJavaの言い回しを考慮した上でも直感的にかける。 >>396
このレスは板内爆撃
本人かシンパかアンチか荒らしかいまいち判別できないので放置でよいよ 俺が Kotlin 押しビデオ作って公開すればいいのか?
しかし Kotlin 初心者なので「いいですよ〜。最高ですよ〜」などと情緒に訴えて見ている側を洗脳しようとすることぐらいしかできない。 >>401
ジャップに布教するなら、みんな使ってますよ〜乗り遅れますよ〜仲間外れですよ〜だけでいいよ
初心者のお前でも、有名企業でのKotlin採用事例を集めて紹介するくらいはできるだろう? まぁでも、kotlin go あたりが推奨されるのはわかるけどな
今更phpとかおすよりかは説得力ある >>402
ああ。そうだな。
後は学生向けにこれさえできれば楽々就職みたいに言うと。 PreferenceFragmentが非推奨になる
↓
代わりにandroidx.preference liblary使えって言われる
↓
日本語のガイドに説明なし
適当すぎんだろイライラ あんま関係ないけどmavenのkotlinプラグインで増分コンパイルされないのって仕様? >>407
ドキュメント読めば書いてあるし問題なくね? >>407
本気で言うけど、公式ドキュメント程度の英語は頑張って読んだ方がいいと思うよ。 まぁAndroidの公式リファレンスは言語切替をシステム化してるから
ドキュメントのバージョンが不一致なら警告表示するくらいすればいいのにとは思う
iOSの方は英語以外バッサリ切り捨ててる(最新は英語読めと明示してある)から
中途半端に惑わされることは無い いつの間にかこんな入門書出てたよ。既にKindle版もある。
Kotlinプログラミング
https://www.amazon.co.jp/dp/B07M8LKSKV もっと可愛い名前にすれば良かったのに
swiftみたいな Androidは公式で日本語ドキュメントあるのか
Kotlinのドキュメントは有志がやってたけどもうメンテしてないよな Kotlin in actionとどっちの方がいいんだ >>417
公式日本語ドキュメントは更新が遅いから読まない方がいいぞ kotlin native応援してるんだけど何が一番貢献になるんやろか?
翻訳とか細かなライブラリ作ったりくらいなら時間かければできそうなんやけど、難しいことはできん。
やっぱ募金とかなんか? >>422
まずはなんとかしてVSCodeを潰そう
このままだとJetBrains無くなるよ >>422
とりあえず公式リポジトリのスターとfork数増やして
kotlin nativeであることをアピールしたライブラリ作ればいいのでは
ただ、現時点ではパフォーマンスが残念だからお勧めしない
出来ることが違うとはいえ、ロジック部分は
JVMどころかKotlin/JS経由のnodeで動かすのより7〜10倍くらい遅い
まだコンパイラの最適化をやってないのは救いだけど
俺はARC with cycle collectorがスループット下げてる可能性を気にしてる
もしそうなら最適化やっても思うほど改善しないんじゃないかと JSとかnativeとかどうでもええ。
いろいろ変更予定のあるJVMとAndroid対応だけしっかりやれや。 JetBrainsの業績そんなに悪くないしむしろ伸びてるはずだけど とりあえずgitとintellijの更新はしとく。
作るとしたら何系のライブラリがいいと思う? >>427
自分で使うやつ
より正確に言うとプルリクエストが来たときに議論できる程度に思い入れのあるやつ
使いもしないのに聞きかじりで作るのはやめておいたほうがいい なるほど。何に思い入れがあったか思い出してくるわ。
ありがと >>432
まあ知ってる人はごくわずかだから話題にしたくても出来る人はいないだろう。 即荒しが何か書いてスレが活性化するかと思ったら完全に無反応。本当に少数なったのだな。合掌。 Kotlin そのものの質問ではないがこのスレの方が分かる人が多いような気がするのでここに書き込む。
IntelliJ IDEA で Kotlin のプロジェクトを作ってその src フォルダで 〜.kt を一つ作ってそこに main() が
あるだけなら良いんだけど、もう一つ 〜.kt を作ってそこにも main() を作って、それぞれを別々に動かす
ということはできないのかな? どうやらそのままではできないようで、そのままやろうとすると個別にコンパイル
しようとしても同じ関数があると衝突してエラーになる。(最初に登録した方のソースは大丈夫。2番目に
登録した方の 〜.kt ファイルのコンパイルでエラー)。
こういう使い方は想定されていないんだろうか? しかしこれができないと小さいプログラムが沢山あるような
プロジェクトは作れなくて個別に沢山のプロジェクトを作らねばならなくなる。仮にそういう風にしかできない
んだとしてもそれならばプロジェクトを束ねるようなその上位の何かは作れないのか?でないと同じ階層に
プロジェクトが沢山作られてしまい非常に使い辛い。 >>435
トップレベルのmain()が名前空間で衝突しているからコンパイルエラーになると思われる。
class MyApp {
companion object {
@JvmStatic fun main(args: Array<String>) {
のような書き出しでエントリーポイントを作ることも出来ますが、そういった方法では解決できませんでしょうか。 >>435
A.kt に書けば AKt.class が、B.kt に書けば BKt.class が生成されるので
JvmNameとかpackage指定と合わないフォルダ下で名前衝突させたりしない限り
普通は衝突しないはずだけど >>436
どうもありがとう。
同じ関数がなければ main() がファイルごとにあっても大丈夫なことがわかった。
実行する時は main() の行頭の左側に出ている ? マークをマウスでクリックして実行またはデバッグすれば実行できた。 >>437
ああ。package 付ける方法もあるな。試してないけどそれでもできそう。 >>437
どうもありがとう。
できたよ。違う package にしておけば同じ関数があってもうまく行く(名前衝突しないんだから当然と言えば当然か)。 いや、437はpackageが同じでもファイル名が別なら衝突しないという話だよ >>441
package が同じというのは2ファイルが package 指定なしの時と同じだよね?
それだとダメだったんだよね。IntelliJ がどういう風にコンパイルしているかの問題だろうけど。 >>442
>同じだよね?
同じ
ほんとにmainが衝突してる?
main以外のトップレベル関数が衝突してるだけか、
もしくはかなり古いKotlinコンパイラ(プラグイン)を使ってない?
>>443
これはKotlinコンパイラの仕様だから別にスレチではないよ >>442
ああごめん435読み直したら、衝突したのはmainじゃなくて「同じ関数」なのね
対応方法としてはmain以外をprivate funにする,
classまたはcompanion objectまたはobjectに入れる
A.kt, B.kt
-----
fun main(){
a()
f.a2()
}
private fun a(){}
private val f = object {
fun a2(){}
} >>446
どうもありがとう。
確かに private でも名前外に出さないからできるね。 Kotlin/Nativeが遅い原因を逆アセンブルして調べてたらこの記事にたどり着いた
https://soywiz.com/kpspemu-kn09/
UpdateReturnRefやLeaveFrameのコストが重すぎる
1.3.20時点ではリリースビルドでも最適化はされていない 誰でも頭が良くなる、プログラムが書けるようになる方法が発見される 56097
https://you-can-program.hatenablog.jp >>449
そのためにわざわざ眼鏡買うのバカらしいから君ちょっと自分で試してみなさい。
それともブログ書いた本人だから試し済みか? ていうか既にプログラム書ける人ばかり来てるであろうスレでそんなの書かれても効果を実感できるやつはほとんど居ないだろうなあ。 今日Kotlin入門しサクッと文法をやった程度のものですがAndroidプログラミングの学習リソースを探しています
JavaでのAndroidプログラミング経験はありません 今日やっていきなりかよ!
もうちょっとKotlin単体で粘れよ!他にやることあるだろ! >>454
>>453はXamarinのAndroid開発のエキスパートかもしれん... >>453
Activityとは何か?と考えることにひたすら時間を費やす。
使用言語にかかわらずandroid開発はそれがすべて。 ぼくなんかJavaちょっとかじっただけでAndroidに挑戦しちゃったわ
あの時はActivityがクラスな事すら分からずにテキスト見てその通り書いてたな……😅 Rってなんですか?とか<T>ってなんですか?とかでぜひ挫折して欲しい 挫折するような人はRとは?とか<T>とは?なんてこと考えたりしない >>453
「Android Hello World」でググる
何はともあれ、まず動かすのが最速の学習 RもTも知らんけど、コピペで動いてるからそれでいい
適当にやれば動く
Rが赤いときは、大抵xmlの打ち間違い
T?知らん コトリンのジェネリクスのTってC#のdefaut(T)みたいなのある? ない
csはint x=defaultってかけるみたいだけどkotlinは明示的に0で初期化しなきゃいけない
他の型でも同じ C#のdefaultは単なるシンタックスシュガーじゃなくて、実行時に型引数に応じた適切な値を生成してくれる機能
JavaやKotlinのハリボテジェネリクスでは原理的に不可能 default(T)ないのか・・・
こうしてみたけど何か改良点ある?
例外時にnullも返せないし例外時に返すためだけに引数にt入れてるんだが・・・
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
class SJson {
companion object {
inline fun <reified T> toObject(json: String, t: T): T {
val mapper = jacksonObjectMapper()
try {
val obj = mapper.readValue<T>(json)
return obj
} catch (e: Exception) {
SLog.e(e.message.toString())
return t
}
}
}
} >>470
単にnullを返したいということなら戻り値を T? にすればいい ObjectMapper って使い回してよかったと思う >>471
T?にしたらnull返せたわサンクス
>>472
なるほどね Kotlin 1.3.30 released
https://blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released/
KAPT関連の機能追加など
符号無し整数配列の機能追加など
Kotlin/Native
mingw_x86サポート
CocoaPodsとの実験的統合機能
C相互運用改善
他 githubのrelease読んだけどめちゃくちゃ多かったな ここからだとまだ 1.3.21 のままだね。
https://kotlinlang.org/docs/tutorials/command-line.html
IntelliJ だと 1.3.30 にアップデートできたけど。 あれ? UInt 型の変数を String.format() で指定する時はどうするのかな?
%d は駄目だし。toString() してから %s 使えってか? >>477
そのまま%sでも使えるけどString.formatはそもそもKotlinでなく
Javaの機能(=Kotlin/JVM以外で使用不可)なので
単純な書式ならString Template使った方がいいよ
val n = 100u
println( "n=${n}" ) UInt に関しては toLong() しちゃえば良いだけだと後で気づいたが、ULong の方はどうもならんね。
ULong.MAX_VALUE と Long.MAX_VALUE は10進数だと20桁と19桁で1桁違うので桁を考慮したフォーマットはこれを考慮する必要がある。
%20d とか %020d と書いても ULong については分かってくれないので自作する必要がある。 C#みたく${}内でフォーマットが使えれば一番なんだけどね… OracleJDK有料化でますますKotlin人口が増えるな たしかASにjavaからkotlin変換がなかったっけ
あれで全て解決するような気がするんだけど jdk有料化とかで騒いでいる奴いるけど
彼らにとってoraclejdkが唯一のjdkなのかな >>484
そうだよ
ついでに世界は五分前に始まった JDK有償化の話は何ら騒ぐようなことじゃなかったのに
Oracleの説明が手抜きだったからああなった
あとOpenJDK公式サイトの構成が酷く大部分がメンテされてないもの原因の一つ
例えば Groups > Adoption > Wiki > Adopt OpenJDK サイト管理者が違うんだろうけど
AdoptOpenJDKへのリンクをトップに置いとけばいいのに
OpenJDKのビルドインフラのメンバーが運用してるんだから うちはAWSのやつに順次置き換えてるわ、名前が覚えにくいけど >>453
おぉー同士。
当方、Visual Basicアプリ、iOSアプリの経験はあるが、Android経験ゼロです。
どうやらAndroidManifest.xmlに記載のActivityがプログラムのエントリーポイントだと解った所。
iOSとの比較で言えば、
Activity = ViewController,
wedgit = View,
Fragment = Container ViewController
AppDelegate = Application
って感じらしい。 >>491
ちょいと違うかも!
Fragment = custom wedgit(user defined wedgit)
みたいだな。
さて、Java, Kotlin初心者なので、両者のコードの対応表が欲しいところだ。 macOS Mojave 10.14.2
Android Studio 3.4
環境でBasic Activity Project作ってHello World表示するまで、かれこれ2hr費やした。
ハマりポイント
1. Gradle project sync failed. Basic functionality will not work properly.▶resolved with installing JDK 8u212
2. No Module Specified▶ガチャガチャやって解決。 ところでGradleって何だ?
daemonとして動いてファイルの変更を監視するmakeコマンドみたいなものか?
今、Gradle sync failed問題で困ってる。
新しくプロジェクト作ったら、Gradle sync failedってエラー吐いて、新規にapkってかModuleを作れない。なぜ?? >>496
何かというのはググってどうぞ
Gradle sync failed は Android Studio側の問題 (おそらくbuild.gradle生成処理の問題)
必要なライブラリのダウンロードが終わってないと発生するような印象
Android Studioを再起動してプロジェクトを新規作成しなおすとエラーが無くなったりする gradle嫌い。
完全オフラインで開発作業したいのに、
ちょっとした事でネットアクセスを要求してくる。 GradleKotlinDSL使ってるけど情報少なすぎてハマるからオススメしない >>497
AndroidStudio3.4(17 April 2019)には問題ありと判断して、3.2へdegradeしてみた。
Gradle sync failed issueは初回Studio起動時に発生するも、指示に従って、build toolの最新版をinstallしてみた。
その後は3.2では問題発生せず!
ちなみに3.3はArchiveに発見できず。September 2018のAndroidStudioだが、まあ、良いんじゃ無いかぁ。 くっそ!
AndroidStudio3.3は、English pageにあるのかぁ。
日本語ページに無いなんて!
どうやら、日本は置いてけぼりって事だ。 AndroidStudio3.4
AndroidStudio3.2
AndroidStudio3.3.2
の順で試してみた。Mojave 10.14.3で。
Gradle sync failedが発生しないのは、3.2だった。
3.3.2, 3.4は発生する。
何をやっているかと言うと、
AndoroidStudioをinstallした直後に、新規プロジェクト(Basic Activity)を作った直後の挙動を調査しているのだ。
プロジェクト作成直後にGradle sync failedってよろしく無いよねぇ。
AndroidStudioをrestartしてもこの症状は解消しない。 >>502
3.3以降で、エラーになったプロジェクトを捨てて
再度新たにプロジェクトを作っても発生する? >>503
します。ただし、3.4の場合、何かのひょうしに解決されて、Gradle sync failedってのが出なくなります。
idea.logファイルに記録されてるWarningはこんな感じ。
WARN - n.GradleOrderEnumeratorHandler - Root project path of the Gradle project not found for Module: 'App03' そのへんのエラーは冗談比喩抜きで「起動しっぱなしで放っておいたら数日後に直る」経験しかない
まあどっかの何かが新しい何かに何かしてなくて放置してると何かが何かなって何かするんだと思う >>504
>Root project path of the Gradle project not found
解決か?
~/Library/Preferences/AndroidStudio3.4/
~/Library/Preferences/AndroidStudio3.3/
を消してやると、Gradle Sync failed Issue解決!か?
今の所、上手く動いてる.
次は、Command Lineでkotlincコマンドを実行したいのだが、AndroidStudioをinstallしただけではダメなのだろうか?
In Android Studio download page, the basic Android tools below are included in Android Studio.
らしいのだが? 試しに、
https://developer.android.com/samples
ここからサンプルプロジェクトをdownloadしてみた。
なんと、AndroidStudio付属のGradleとは異なるバージョンのGradleのinstallが始まった。
サンプルプロジェクト毎にTarget API Levelが異なるために、それ用のGradleがinstallされるみたい。
AndroidStudio3.2, 3.3.2, 3.4をinstallしたが、しばらく3.4を使ってみる。 >>505
Gradle daemon(プロセス名java)をkillしてやれば、Sync failed Issueは解決するのかも! developer.android.comからサンプルをdownloadして動かしてたら、Gradle daemonが3つも動いてる事になった。
各々違うVersionのGradleらしい。
どうやら、androidの開発環境の歴史的変遷から、ややこしい事になってるみたいだ。
build.gradle(Module:app)とbuild.gradle(Project: kotlinApp)の2つあったり。 連投しているところ悪いけど、その手の日記ならQiitaにでも書いておいてほしい。
ていうか書くまでもなくそこに答えが書いてある。 まずはAndroid関係ないシンプルなGradleプロジェクトを作ってみることをお勧めする。基礎知識が欠落しすぎてて余計な回り道しかしてない。
よほど込み入ったことをしない限りそんなに複雑なものではないから。
少なくとも歴史上生まれてきた数々のビルドツールの中では1番マシ。 .gladleのキャッシュとかいろいろあるけどねえ
ガチャガチャやってりゃ直るからgladleは優しいよな それ。ぶっ壊れたと思っても適当になんかしてりゃ直ってくれるから優秀。 まったく毎度毎度グーグルの仕事はほんんんんと雑だな fragmentのbindingってlateinitでvarにするのとby lazyでvalにするのとどっちが正解ですか >>512
thx
found great articles in Qiita concerning Gradle build tool. 1年くらい前は確かに阿鼻叫喚だったけど今となってはもう誰も問題だと思ってない >>519
JVM, JRE, JDKが今どんな状況か分かってなさそう >>522
Android Studio 3.4
Build #AI-183.5429.30.34.5452501, built on April 10, 2019
JRE: 1.8.0_152-release-1343-b01 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.14.3
これでどう? 俺、AndroidStudio3.4をinstallしてからGradle sync failed問題を解決しようとして、Oracle JDK8u212ってのをinstallしちまった。
AndroidStudio3.4にはOpenJDKってのが入ってるのか?
Oracle JDK8u212ってのはuninstallしても良いのか?
ちなみに、Command Lineでjava -vすると
>java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode) >>524
Android Studioには専用にカスタマイズされたOpenJDKが組み込まれててそれを使って動いているから、システムに別のJDKを入れようが入れまいが関係ない ちなみにgradleってファイル名のbash scriptがAndroidStudio3.4には入っていて、
1. $JAVA_HOME
2. which java
上記からjavaコマンドの場所を検索してgradle-launcher-5.1.1.jarを動かしてるみたいなんだけど。 >>525
なるほど!
ってことは、Oracle版JDKはuninstallしてもOK?
以下のフォルダをごそっと削除してしまいたいんだけど。
> /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.8.0_212.jdk/Contents/Home >>528
Android Studioを動かすだけなら消しちゃって大丈夫。
そのパソコンで他にjavaに依存している何かを動かしてるなら消しちゃダメ。 >>529
thx
javaに依存してる何かは、無いです。
kotlinc(Kotlin Compiler)コマンドを使いたいので
>brew install kotlin
ってコマンドを打とうとしてます。
kotlinがJREを必要とするなら、JREも同時にbrewがinstallするでしょう。
だったら、消さずに残すのが良いでしょうか? この前も別の初心者がkotlincで詰まってたんだけど、どこかの有名な入門サイトがコマンドライン推奨でもしてるの?
正直kotlin書くならIDE前提だろうからコマンドラインでコンパイラの使い方を覚える必要なんて全くないと思うんだが。 >>532
うっそーん。
コマンドラインでチョコっと、コードを試したいってこと無い?
IDEよりVimが好きな俺だけか?
ようやく、Quickrun.vimが動くようになって、今コレ読んでるところ。
はじめてのKotlin。Javaと比較してみた
https://qiita.com/hituziando/items/fa2dc4097b24ab78276e
30分で覚えるKotlin文法
https://qiita.com/k5n/items/cc0377b75d8537ef8a85 それならブラウザ上で実行できるplayground的なものが公式にあったはず ちょっと書いてちょっと動かすにしてもIntelliJでRunした方がいいしな、デバッガが超優秀だし
Vimで書いてコマンドラインで実行ってのは確かに昔Javaを勉強した頃はやったけど、
今となっては出汁をとるのに鰹節を削るところから始めるような古めかしさを感じる まあ好みだからそれがやりたいなら良いとは思うよ
仕事で新人がそんなことで詰まってたらやんわり注意するかもしれんけど 単一ファイルを少し変更したいときはエディタ。
それ以外はIDEを使う >>537
三大Java IDEは気にはなってるけど、今の所リソース食いそうで躊躇してます。
今の所、Referenceの検索容易性から俺にはVimかなぁ。
デバッグ環境はpoorかな。print文を埋め込むしか、今の所は手が無しかな。
デバッグが必要ならAndroidStudio起動して、なおかつKotlin Scriptに変換して動かす事にします。
ScriptじゃないKotlinコードをAndroidStudioで動かす事は出来ないのかな?よく解らん。
Xcodeならplayground作れるんだが。 君、謎の行動力がありそうでそれはいいんだけど、
本当に何から何まで無駄なことばっかりやってるからまず最初に調べる癖をつけたほうがいい
この世界は一にも二にもまずは調べることが何より大事 KotlinやるならIntelliJ一択
あとガワが違うだけでAndroid Studioの中身はIntelliJ
※Android以外のプロジェクト作成など、一部の機能を非表示にしている Kotlin勉強したいならIntelliJの無償版使うのが1番おすすめだねえ
ちなみにAndroid Studio動かすのと消費するリソースは同じ、何せほぼ同じものだし >>522
・JVMはJREの一部、JREはJDKの一部
・Java9以降「システムへの単一JREのインストール」は無くなっており、
JDKから各アプリの同梱用JREを生成する (jdeps/jlink)
・OracleJDKに含まれるJVMは既に有償化されている
・OpenJDKに含まれるJVMは今後も有償化されることは無い >>535
ある。ちょこっとする時は例えWindowsで IntelliJ 起動中でも Linux サーバ側でREPLやるな。
なんでかというと IntelliJ のREPLのウインドウはなんか出力がすぐ出なかったりでおかしいから。
その他短すぎるプログラムのためにわざわざプロジェクト作ったり packge 作るのもアホらしい時とか。 Android Studio残念ポイント!
1. Android Projectしか開くことができない。
2. Hello Worldするhello.ktを開くことができない。
なんで?そう言う時は、IntelliJ使えってことか?▶なんだろうなぁ。 >>548,549
JUnit使う手がある。
しかも、main毎にファイル分けるとかしなくていいし。 >>548
IntelliJのあれはまともに動いてないんじゃないかとずっと思ってる
まともに使えてる人いるのだろうか…? Intの変数名をintってするのってまずい?
val int : Int = 0
こういうの >>548
REPLねぇ。
Ruby, JavaScript(Node.js), SwiftのREPL環境を使ったことあるけど、Reflection機能が充実している言語(ruby)以外、イマイチだなぁ。
コードの編集も不自由だし。
あんた、本当にLinux側でREPLする事あるの? >>552
怖いなぁ。そのコード。
俺、さっき、setNameってメソッドを作ったら、clashしてるって怒られた。
clash = conflict って意味らしい。
java.lang.StringのsetNameメソッドとコンフリクトしてるから、コンパイルしないんだって。 そういうことあるのか
でもIntがintじゃないのってintを変数名で使ってもいいよっていう意思を感じるんだよなあ
val hoge : Hoge
ってすることを考えると
val int : Int
も自然な気がする ああでもjavaは予約語でintだめなのか
やっぱりやめておこう そもそも逆コンパイルしたソースじゃないんだから
意味のある変数名付けなよ macOS10.14.3
AndroidStudio3.4
環境です。API Referenceを参照するには、どうすれば?
Command-Jで起動するかと思いきや?何も起こらないっす。
Webサイトへ行かないとダメなのかな? >>558
see the hit result of Help>Search(Documentation).
You can retrieve the documents by ctrl-J@macOS as well. >>555
とりあえず変な癖をつける前に『リーダブルコード』を読んでくれ、頼むから リーダブルコード読みやすいしわかりやすいし為になるし
書いたやつ神 >>562
>リーダブルコード
この本そんなに良い本なのか?
ペラペラ見たことあるけど、すでに知ってること、というか、実践していることしか書いてなかった。 >>564
じゃあその本に書いてないことが書かれた本を出してくれ。Kindle版だけでもいいから。 >>565
知っていることを再認識させてくれる良書ではある 何でIDが同じになるんだよ
同じプロバイダーなのか たまーに同じID出ることあるな。ものすごく希だが。
きっと今日は良いことあるよ。あと3時間40分ぐらいで終わるけど。 >>565
嘘じゃない。
ああぁ。俺は間違ってないんだな。という感じ。
まあ、詳細に読んだわけでは無いし、プログラマが知るべき97のこと、って本にも似たような事が書いてある。
Matzも「名前重要」なんて事を、97本に寄稿している。
プログラミング作法、なんかの方がよっぽど良かったな。俺には。 >>569
って事はHash algorithmがpoorってこった。 >>570
>Matzも「名前重要」
私の設計上の座右の銘は「名前重要」です。あらゆる機能をデザインする時に、私はその名前にもっともこだわります。
courtesy of Matz プログラミング作法
プログラム書法
ソフトウェア作法
全てブライアン・カーニハン御年77歳の名著 >>571
まあそういうことだな。
こんな掲示板でrichにしてどうするって感じはするが。 >>566
じゃぁ、一つ俺の考え方を!
狭いスコープの中を生きる変数は、名前が短くても良い。
e.g. str1 = “OK”
広いスコープの中を生きる変数の名前は、長い名前が必要。
e.g. numberOfBooks = 100
何時いかなる時も、意味ある変数名をつけるのは、俺は反対だ。
変数名を考える事に、時間が惜しい時もある。 やはりプログラミングも茶道とか華道とかと同様にプログラミング道を作ってわびさびが必要な時代が来たのかも知れないな。 >>576
そ、ループ変数なんて i, j, k, ....nで良いやん >>576
変数名を日本語にすれば良い。
ソース丸ごと世界に公開する予定がないならその方が分かりやすくて良い。
日本語知らないやつには難読化して軽くプロテクトが掛かった状態にもなる。 >>581
昔、英語が出来なかった時には、
kabuPrice
とか
kabuka
なんて恥ずかしい名前使ってたけど、
今では、
sharePrice
でないと、code reading時にストレス感じるわぁ。 val 感じ = "感じ"
print(感じ)
なんと、warningは出るが、実行可能。 Qiita見ながらKotlin修行中だけど、
Jump Command便利そう。
return@forEach
continue@loop
return@loop
とか言うやつ。
これSwiftに欲しい。 そんなことより、API referenceってかDocumentをofflineで見る手段、どうしてる?
Zeal, Velocity, Dashなんかを使ってるの?
Android StudioでAppCompatActivetyを引くと
android.support.v7.app.AppCompatActivity public AppCompatActivity()
Gradle: com.android.support:appcompat-v7:28.0.0@aar
たったコレだけしか表示されないっす。 >>585
便利な反面1歩間違えると悲惨なコードになりそうだな ごめん間違えた、SwiftにあるからKotlinに欲しいって読み違えた
Xamarinのライセンス買ってくる goto文みたいに次にどこに行くのか読みにくいって意味じゃないかな
そんなことはないけどね 変数名漢字って結構有りだと思う
平均からすれば英語かなり必死に勉強したほうだと思うけど、ネイティブからすれば変な英語使ってるって自覚あるし
ネイティブ的な感覚がないから、命名には常に苦労する
もちろん特定用途でしか使えない手法だけど、やっぱり母国語ってわかりやすいよね
英語圏のやつらにスーパハカーが多いのはそういう理由もあるよな、母国語でプログラムできるのうらやましいわ >>594
英語人口20億、英語母語5億
くらいじゃない?
チェコ、ロシア、ルクセンブルグにHacker多い印象が俺にはある。 Constructorの書き方がムズイ。
primery, secondary constructorとか、Swiftには無いし。
Kotlinスタートブック、はしばらく様子見。今の所買わない方向で…
だって、2016年の本って、情報が古そうだし。 そのうち在日ユダヤが「日本人にベーグル盗まれた」なんて狂言やりそう >>594
日本語固有のややこしい漢字の名称を無理やり英語にするよりはそのまま使った方が可読性もはるかにいいわな
何か不都合が起きたらIDEでリネームすりゃいいだけの話だから、全然ありだと思う
俺はテストケース名は日本語がんがん使う >>596
Swiftの designated initializer ≒ Kotlinの primary constructor
Swiftの convenience initializer ≒ Kotlinの secondary constructor >>577
勧めるものじゃないけど、一応疑似的にならば
https://ideone.com/7lTdsi
class A {}
private val xname = WeakHashMap<Any,String?>()
var A.name: String?
get() = xname[this]
set(v:String?) { xname[this] = v } >>602
Kotlin day3の俺には、なぜAのインスタンスがnameプロパティを持つのか?
良く解らん。
Rubyみたいに、Aを再オープンしてるのか? >>604
fun mainの外でthisは何を指してるのだ? >>605
>fun mainの外でthis
ってのはMainKtのインスタンスってことか?
うぅーん。後で確認。
fun main(args: Array<String>) {}
in a file called Main.kt will compile to something like:
public class MainKt {
public static void main(String[] args) {}
} >>604
602は拡張プロパティとシングルトンのWeakHashMapを利用している
詳細はgoogleで
拡張プロパティ:
見た目はプロパティだが実際のところ
staticメソッドのシンタックスシュガー
fun A_name_get(thisObj: A): String? {
return xname.get(thisObj)
}
println( a.name )
↓
println( A_name_get(a) )
WeakHashMap:
キーがGC対象となるのを阻害しないMap
aとnameの関連付けはここに入っている
aがへの参照が無くなったら、nameへの関連付けもCG対象になって消える >>607
>拡張プロパティ
気になる!
Rubyの特異メソッドみたいなもんか?
特異メソッド:クラスに住んでるメソッドとは異なり、オブジェクトに住んでるソレ! >>608
特異メソッドとは違うみたい。
Rubyのクラスの再オープン、オープンクラス、monkey patching
とか言う邪悪なテクみたい。
Dateクラスに本来備わってないyesterday, tomorrowとかいうpropertyを追加したりできる。 うぅーん。
top level でthisが何を指しているのか?
よく解らん。 >>610
きっとthisは、nameプロパティーが呼ばれるまで定まらなくて、nameプロパティーのレシーバー(a1, a2)の事なんだ。
と言う事にしておこう。
拡張関数、拡張プロパティー、が必要になった時のメモ
Kotlinの拡張関数と拡張プロパティについて
https://qiita.com/RyotaMurohoshi/items/4b958af1d23da6d91a61 >ID:ZqBzQREh
日記は自分のブログでやってくれ 散々言われてるみたいだけどまずとりあえずググる習慣をつけなさい
君はしなくていい回り道が多すぎる >>602
なるほど外のmapに入れられたのか、盲点だった
それとweakhashmapなんてあったのか初めて見たわ >>547
30分で…の記事、2日かけてようやくinfix記法のところまで読めた。
多分費やした時間は6hr以上。
全然30分じゃない。 なんと、キーワードになっている識別子もエスケープ可能!
例:isと言う名前のメソッドも呼び出せる。
foo.`is`(bar)
こんな感じ! Qiitaの30分で…の記事、走り読みした。約8hr位要した。
Vim内でチョコチョコ試運転しながら、走り読み。
お疲れ様でした。▶俺 レシーバー付き関数リテラル、がよく解らんかった。
クラス移譲、プロパティー移譲
byとか使う奴。こんなのSwiftには無かったなぁ。 >>596
Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016
太郎本を買っていない香具師は、モグリ! Kotlin は、swift とは似ていない
Kotlin は、Groovy を静的にしたもの。
つまり、Ruby, JavaScript の系統
オブジェクト指向・関数型のミックス > 読みやすい
> if (length > 10 )
>
> 読みにくい
> if (10 < length)
その主観は慣れによる、俺にとっては前者の方が読みにくい
うちでは「物差しの向きに一貫性を持たせる」という指針でやっている
その上で統一のため原則として「小さい方を左に書く」
よって >, >= を使わない
if (10 <= length && length < 100)
まぁRangeやRectでメソッドでの判定をすることも多く
そういう場合は左がどうこうというのは無いが >>626
>if (10 <= length && length < 100)
if (length >= 10 && length < 100)
たまに、こう書くヤツが居るが殺意を覚える
一般的には可変値が左だと思う 俺も可変値が左だと思うけど、統一された指針が既にあるならそれを貫いたほうがいい
一貫性はとても大事 小さい方を左に書く。
頭の中では、大小は、左右で考えているから
横書きと同じ感覚。
左上がスタート地点
洋画ではそう。左上に赤色を配置する。
そこが目線のスタート地点。
そこから時計回りに目線が、渦の中心へと向かっていく >>626
普通、言葉で考えると「lengthは10以上100未満?」て聞くじゃん。
「10は〜100は〜?」みたいな聞き方しないよね。
主語と動詞を逆にしちゃいけないと思う。
CやC++の頃は
if (length == 10) としたかったところをコーディングミスで
if (length = 10) にしてバグるのを防ぐ為に逆向きにしてた人を見受けたけど、いまどきはIDEがエラー出してくれるからねえ。 >630
なるほど、確かにバグ防止で逆向きにも一理ある
面白いこと考えるね C言語では、左に代入できないものを書いていた
比較演算子と間違えて、代入演算子を使うと、コンパイルエラー ヨーダ記法が可読性低いってのは散々言われてる
結局流行ってないしやらなくていい >>630
> 言葉で考えると「lengthは10以上100未満?」て聞くじゃん
なるほど、改めて思い起こすと言葉以上に図や式で考えているな
そういう資料を読み書きすることが多いからかもしれないが
10 length 100
--|----^----------|--
10 ≦ length < 100
他所のだけどイメージ
https://i.imgur.com/d5iRSb2.jpg kotlin day4
kotlinc, kotlinコマンドの-classpathオプションの使い方でハマった。
>kotlin -cp jsoup-1.11.3.jar JsoupKt
error: could not find or load main class JsoupKt
こちらが正解
kotlin -cp .:jsoup-1.11.3.jar JsoupKt
なんか、変な仕様。そろそろbuild.gradleファイルの作り方を学ぶべきか? あのぉー、Kotlinでスクレイピングしたいんですけど、
Jsoupがbest practice?
https://github.com/jhy/jsoup
実は、Javaも初心者なので、Kotlinへのmigrationでヘトヘト! >>640
どんなサイトをスクレイピングしたいのかによるけど、javascriptをガンガン使ってるようなサイトならSeleniumが鉄板だと思うよ。
Jsoupでもjsを実行させられるらいしけど、とても辛いと聞いたことがある。基本的には静的なhtmlを扱うためのライブラリ。 >>641
thx
Kotlin day5
コマンドラインで、jsoupでスクレーピングするソースを作成できた。
昔を思い出して、実行にはMakefile作成して行った。
Makefile内で文字列操作(大文字小文字変換とか、文字列連結)とかできるかな?
Makefileはこんな感じ!
CC := kotlin
CFLAGS1 := -cp jsoup-1.11.3.jar -include-runtime
CFLAGS2 := -cp .:jsoup-1.11.3.jar
SRC := jsoup
all: go
go:
$(CC)c $(SRC).kt $(CFLAGS1)
$(CC) $(CFLAGS2) JsoupKt
~ >>642
makeが何かをわかっていたらそんな質問はしない >>641
Seleniumってテストツールだと思ってたが、そんな使い方があるのか。
目からうろこが1000枚くらい落ちた。 >>644
Selenium自体はテストとは無関係だよ、ただ用途としてテストツールと組み合わされることが多いだけ。
最近のサイトはReactとかで動的にガンガン組み立てられるからスクレイピングもSelenium使っておいた方が無難。 Ruby, Nokogiri, Selenium WebDriver を使えば?
CSS Selector, XPath で、要素を指定する
driver.execute_script で、JavaScript のソースコードも実行できる Kotlin勉強してるって言ってるんだから別にRubyじゃなくていいだろ NokogiriでXPathとCSSセレクタ使うならべつにこっちでも同じだと思うよ JsoupはNokogiriと違ってXPathを使ってDOMの操作ができない。
けど、使い方はNokogiriとよく似てる。
Androidアプリにスクレイピング機能を実装したいので、Ruby使えば?は却下! ところでJsoupの名前の由来って何?
Java soup = Javaのスープ
変な名前。 いちいち聞かずに勉強しろと延々言われているのに守らないからそういうちぐはぐな恥を晒して支持を減らすことになる(君はすでに識別されている)
どうせPythonのBeautifulSoupのことも知らないしタグスープという言葉も知らんのだろう
…あ、後者は別に知らんでいいわ、知らない人が多いし正式な用語というわけでもないから >>651
まあまあまぁまァ、落ち着けよ
このスレのレベルはピンキリさ >>651
thx.
That is originated in “soup HTML document up beautifully”, it seems. 個人の試行錯誤の実況でスレが消費されてくより過疎ってた方がマシ スレの消費はどうでもいいんだけど、試行錯誤の記録はqiitaなりブログなり自分で管理できるところに残しておいた方が後々良いと思うんだよね >>516
fragmentは再利用されるからlateinit var >>658
わかったからFlutterで(を?)使えるようにしてくれ
現時点で構造的に対応超絶困難だ
マテリアルデザインの普及にも役立つだろ kotlin day17、object式
クラスAをインターフェースBによって僅かに修正したクラスCのインスタンスが必要となった時に、サブクラスCを宣言せずにそのインスタンスabを生成できる。
```kt
open class A(x: Int) {
public open val y: Int = x
}
interface B {...}
val ab: A = object : A(1), B {
override val y = 15
}
``` 前スレでも書いたがKotlin/JSに続く、Kotlin/Dartトランスパイラをだな・・
まぁやれるとしたらJB側だからリソース的に無理なんだけどな >>661
Flutterが目当てなら、必ずしもDartを介することはないのでは? >>662
少なくともDart Kernel binaryを生成出来ないとFlutterのホットリロードが使えない
Kernel binaryの仕様はDart自体より安定してない
https://flutter.dev/docs/development/tools/hot-reload
https://mrale.ph/dartvm/
Flutterのクロスプラットフォーム性や開発時の機能などの結構な割合を
Dart自体の機能により実現しているのでその辺の仕組みに乗っかれないと逆に厳しいと思うぞ flutterも最初素晴らしいと触ってたけど、dartの糞さに嫌気さしてさわるのやめたな。つか、flutterは致命的な問題もあるしな kotlinのgraphqlライブラリ微妙だからscalaのsangria使えないかなー
sangriaどころかscala触ったことないけど モバイルアプリはメモリ不足によってプロセスキルされ、キル前の状態に戻すために復元の仕組みが用意されてるがflutterではどうすればいいの?問題。
例えばandroidならonSaveInstanceStateがあるが、flutterではどうすれば?
flutterは1つのActivity上でページ遷移してるが、ページ毎に状態保存、復元は?
https://github.com/flutter/flutter/issues/6827 モバイルアプリ開発したことあれば必ずプロセスキルの問題に出くわすと思うんだがflutterの開発チームはこれ放置してるという。普通flutterの設計段階でこの事考慮すべきだが全く考慮してなさそうというあほっぷり。 地方都市だけど最近Android本が本屋に数冊しかない
他言語は田舎のわりにはけっこう置いてるんだけど
Kotlin移行の影響なのかも >>670
flutter詳しくは知らんが、もしそれが本当ならモバイル用途としてはたしかに致命的欠陥だな
後付けでflutterのフレームワークの中で強引に全部保存復帰するようにするから気にするな、みたいなこと
考えてるとしたらヤバイ
そういうことができないモバイルだからステートの保存と復帰はアプリに投げるように作ってあるのに・・ >>671
同志
Android関連本、俺のところも本屋には少ない。
大阪に隣接の県の県庁所在地なんだけど。
大阪のデカイ本屋へは往復2,000円掛かっちまう。 >>675
Kindleおすすめ
マルチディスプレイで勉強捗る >>677
Kindleも試したけど、俺、紙の本派なんだよねぇ。
書き込みできるのが紙の本がありがたい。
KindleのためにiPad Pro 12inchも買ったけどやっぱり紙が良いんだよねぇ。
俺って、変かなぁ。 紙の解像度にはまだまだ電子書籍は敵わない
紙の優位性はあるから書見台(ブックスタンド)とか使え、そしてやっぱイマイチだってしまい込むんだ
印刷したデータは死んだデータだってのは、まあ、その通りなんだけども ktorでhttpsやろうとしてサンプル試してみたけどなんかダメだな >>673
Amazonも楽天も使ってるよ
ただ本屋に置いてない状況を見ると
Android開発の人気無くなってきてるのかなと思って
本屋は内容確認できる長所あるし
もう少し置いてほしいところ >>680
オレオレ認証局だけど出来たよ。Let'sEncryptのところでなければ答えられるかも。
>>681
Android開発者が紙の本からKindleに移住している可能性も。
といいつつ自分はPC本は紙派。読んだ後確認する時にこのあたりかなとパラパラとめくりながら探せるので。 [改訂新版]Android SDKポケットリファレンス
これのKindle版って、サンプルコード見やすいですか?
[改訂新版]Swiftポケットリファレンス、こいつのKindle版掲載のサンプルコードは、文字の拡大縮小も可能で、Goodなんだけど。
Kindle Paper Whiteで閲覧します。iPad Pro 12inchもあるけど。 ちなみに、お試し版をPaperwhiteで見てみたけど、お試し版は最初の数ページ、しかもサンプルコードが無いページしか、試し読みできませんでした。 kindleはコピペできないからPDF版のあるやつは、そっちを買うようにしてる。 その本つてKotlin対応してなかった気がするけど
Javaでも良いの? ここが過疎ってるような気がしてslack見てみたけどそっちも過疎ってるのかな。
slackの使い方間違えてるのかな。。 forEach は Iterable<T> と Iterator<T> にあるのに forEachIndexed は Iterable<T> にあっても Iterator<T> にないのは何故か? Iteratorは拡張関数が4つしかなくインターフェース変換を除くと実質2つ
なのでむしろforEachとwithIndexだけが特別扱いのようなもの Ruby では、クラスに、each メソッドが定義されていれば、
include Enumerable で、map, each_line などの便利な機能を使える(Mix-in)
Enumerableのラッパーが、Enumerator で、
eachを定義していないクラス、例えば、String クラスに、Enumerable の機能を追加する
Enumerableは内部イテレータで、Enumeratorは外部イテレータ。
外部イテレータは、繰り返しの進行を制御できる
enum = "a\nb".to_enum( :each_line ) # Enumerator
enum.with_index do | line, idx | # 1行ずつ処理する
p [ idx, line ]
end
出力
[0, "a\n"]
[1, "b"]
with_index は、Enumeratorクラスのメソッドで、
map に、インデックスを渡すことも出来る
p enum.with_index.map { | line, idx | "#{ idx } : #{ line.swapcase }" }
#=> ["0 : A\n", "1 : B"] >>691
あー。そうか。
まあ Iterable は中に Iterator 返すやつ一つ作ってしまえば良いだけなので object で作ってそのまま forEachOndexed で使えば良いだけなのだがなんというか面倒。
あ、自分でそういう拡張関数作ればいいだけか。てか作っておいて欲しかっな。 >>689
イテレーターは列挙するものだからインデックスと直結しないのでは
n件のリストがあったとして、それをイテラブルとして回すときのインデックスはほぼ自明だけど
そいつを3から始めるイテレーターや逆順のイテレーター
3歩進んで2歩下がるイテレーターのインデックスというのは
ルールを決めてしまえばいいんだけど本質的な属性ではないと思う 拡張関数ってグローバルだよな
どこに書けばいいか迷ったあげく使うクラスと同じファイルに書いてしまう 拡張関数めっちゃ便利だけど、用法用量を守らないととても危険だよな 拡張関数の定義を interface の中にすれば、使用可能範囲をコントロールできる どのみち、IDEがないと読み難い言語だから、Extensionはさして気にならない。
プロパティアクセスのせいで、知らず知らずにシャドウしてしまう方がずっと気になる。 ts2ktって放置されているっぽいけど、今でも使いものになるの? >>699
Android以外はちゃんと動くんかな・・・・? >>698
拡張した本人しか認識できないのもができるからな。 >>699
興味あるわこれ
今やってるの終わったら使ってみようと思うんだけど誰か試してみた? 社内の持ち回りの勉強会で、vimでKotlin開発する環境を気合いで整える、という発表をしたら大受けしたわ
もちろんネタとしてな。絶対idea使った方がいいぞ。 やらないと後で「おまえやるって言ったよな」と責められるw kotlinでandroid開発の記事載ってる雑誌ないですか
ネットや書籍から情報得るしかない? そもそも今ではプログラミングについての雑誌が少ないよね。
Software Design か日経ソフトウェアぐらいなんじゃないか?
ハードウェア寄りな Interface みたいなのもあるが。 断片的なのはネットで調べればいいが、
体系的に全体をまんべんなく知りたいってときは、
やっぱり書籍が適してると思う。 書籍もガッツリ読むなら紙の本がいいし、写経するなら電子書籍の方がいいし
選択肢が増えた分だけむしろ選ぶのが大変になってるな SoftwareDesignは最近はもう読んでない
バックナンバーも大量に棄てた
川上さんの連載のだけ残してる 雑誌のいいとこは判型が大きいことだなw
ただのブログよりは読者層を意識してる率が高くて、Web記事よりはまとまりと終わりがある可能性が高いという感じか
なにの情報を欲しいと思ってるのかに依存する気がするぞ 雑誌の良いところは、本よりも情報の鮮度が高いってとこだね。 日経ソフトウェアは、素人向け
SoftwareDesign ぐらいか。
WEB+DB は、システム環境・プログラマーが半々ぐらい
他は、日経Linux は、ラズパイが多い
フレームワークの巨匠と言えば、掌田津耶乃・山田祥寛
山田の講習会は、数万円とか。
掌田なら、十万円ぐらい行きそうw 最近の日経ソフトウェアはPython雑誌みたいになってる
Kotlinの記事なんて全く載らない そういやPython大ブームだね。
機械学習関係で火が着いた感じか。 数年後に始まる小学校でのプログラミング授業もPython採用と予想。 おすすめかどうかを意識しろ
あるかどうかではなく、おすすめかどうかだ
検索すりゃこのご時世英語含めてたくさん出てくる
そんなの見りゃわかる
おすすめできるものかどうかがいちばん大事 kotlin使った事無くて勉強中なんですが
null安全は通信で届いたオブジェクトについてどう働きますか?
あるいはデシリアライズされたオブジェクトについて
そこでもnull安全ですか? 当然どんなオブジェクトであれKotlinで書かれている限りnull安全は機能するけど、君はそもそもnull安全を誤解してそうな予感がする 検索すると、null不可な変数にnullを代入できないこと、とあります。
そうすると通信で受信したオブジェクト等はどうなるのかなと。
この理解は間違っていますか? どこまで「使ったことない」かにもよるんだが
・nullかどうかの条件分岐をクリアした変数
・nullかどうかの条件分岐をまだやってない変数
の2つがあるだけだと思っていい
外部から取得したデータがあったとして、nullチェックをまだしていないならnullableだ
どこかで誰かが(静的文法解析上)nullではないという条件分岐を通したあとならそれはnonnull
どこかで誰かがその後にnullになるかもしれない処理を通したらnullableに戻る >>736
文字列とか通信データから、新たなオブジェクトを構築するのでしょ?
構築できたら、null ではないし、
データがおかしくて構築できなかったら、エラー! 当然nonnull出ない変数ににnullをぶち込んだらエラーになる >>736
nullを入れられない型なのにnullを入れようとしたらその時点でオブジェクトを生成できずにエラー
なので、json文字列を受け取ってオブジェクトを生成する部分で要件に合わせて適宜いい感じに処理する必要がある >>736
試してみればわかると思うが、nillableな型にnull入れてObjectOutputStreamで書いた後でnullableでなくしてコンパイルしなおしてからObjectInputStreamで読もうとするとInvalidClassExceptionが出る。 kotlin使ったことないって奴向けの説明ではないな そもそも聞かれてることに対する回答としてはピントがズレてる
自分の知識自慢したいイキリオタク感がすごい >>734がおそらくしているであろう幻想を抱いていた時期が自分にもありました
とエスパーしながらいうと、通信で受信したオブジェクト等はnullableな型を持つことになるだけで、
Kotlinにしたからといってnullチェックが要らなくなるわけではない。
>>736には誰の説明が分かりやすかっただろうか。 >>744
ずれてないだろ。通信でオブジェクト送る話なんだから。 Javaのコードを呼び出すところは、全部そうだね。
Kotlinはnullableであることを「強制しない」。
AndroidとかjavaxのAnnotationでもついていない限り。 コンパイルエラーになるかぬるぽでばーんってなるかの違い null安全は以下の機能を包括する言葉
・型システムでnull許容とnull不可を区別出来る
・null許容型の取扱いを容易にするモナド操作などを言語仕様や標準ライブラリに持つ ∧_∧ / ̄ ̄
( ´∀`)< ド?
( ) \__
│ │ │
(__)___) 逆引きのAndroid開発用のKotlin本ないの?
Javaのはあるけどさ >>754
>>755
ほんとのほんとに?
作り始めてまうで? >>754,755,758
iOSアプリを実際に作った人がこの板にこんなにいるとは思えないんだがw
いや、自分もないんだけどさw Kotlinでの競技プログラミングのコンテストがあるよ!
5月28日の23時35分から2時間半!
Kotlin Heroes Announcement
https://codeforces.com/blog/entry/67162
https://codeforces.com/contests/1170 英語で書かれた問題を解読するだけで2時間半が経過してしまいそうな予感 >>760
IntがintになるかIntegerになるか考慮しないといけなかったらちょっと嫌だなあ。 >>759
大丈夫、Kotlinも業務で使ってるしiOSアプリも業務でいくつも作ってるからさ
Kotlin nativeのiOSアプリも実際に作ってみたって人と勉強会の懇親会で話したことがある Listの初期化って
var list = listOf<Hoge>()
と
var list :Hoge? = null
どっちがいいの? >>765
全く違うもの出されてどちらがと聞かれても・・・ >>765
その2つでいうなら下はリストを作れてないから上一択になるぞw 間違えた下は
var list :List<Hoge>? = null
ね
これならどっちがいい? どちらにせよその2つは作られる型が違う
nullableにする必要があるかどうかで使い分けろとしか 特別な理由がない限り上はvarじゃなくてvalにすべきじゃない? >>770
なぜ?
>>771
valにしたら代入できないじゃん val にして空の MutableList 作るのは? >>772
ああごめん val にしてMutableList な
だが、おまえが欲しいのはたぶん
var list = emptyList<Hoge>() >>772
Kotlinにおいてはvarもnullableもごく限られた場面でしか使わない例外的なものだということは知っておいた方が良い。
nullableは無駄に取り扱いが面倒だったり、varは予期せぬバグを生み出す温床になり得るから。
なので
val list = mutableListof<Unko>()
が、大抵の場面で正解。 かといって盲目的に mutable collection を使うのもどうかと思うがな 盲目的も何もコンテキストが分からないんだから一般論としてvarを使うよりはMutableListを使う方が適してると言うしかないだろ
どんな状況でも何がなんでもMutableListを使えなんて誰も言ってない 俺も>>777にするな。
もしくはlateinitを使うか、どちらか。 >>768
状況にもよるけど、>>782で出たlateinitか、場所によっては
val list by lazy{ [List<Hoge>を返す式] }
そもそも、listの要素が出揃っていない段階でlistを宣言するのが適切でない可能性も。
val list = [List<Hoge>を返す式]
のようにいきなり最後まで計算するか、少々面倒だけど>>773の言うように一旦
val temporaryList = mutableListOf<Hoge>()
して要素が出揃ったら
val list = temporaryList.toList()
するとか。 valだけが正しい。valにできないなら新しいvalにコピーするべき >>783
それだとvalじゃなくてvarじゃね?
始めに空のList入れる意見が多いけど結局使う時にemptyかチェックするでしょ
nullかどうかチェックするのと同じじゃね? nullの警告が厳しいからこそ使うのはどうだろうか
nullならnullだと知らされるがemptyじゃ何の警告も出ない ・リスト自体を構築するケース
・listを使わないケースがかなりある and 非常に効率重視(※)なら
var list: List<Hoge>? = null
必要になったら list = mutableListOf()
・そうでないなら
val list = mutableListOf<Hoge>()
※mutableListOf(=ArrayListの生成コスト)すら許容出来ない場合
なおmutableListOfと比較するとlazyの準備処理の方がコストが掛かる
・場合によって構築済みリストを入れ替える(再代入)するケース
var list = listOf<Hoge>()
補足: listOf()はemptyListにinline展開されEmptyListのシングルトンを返すので生成コストは無い
>>765 >>772は再代入目的のようなのでlistOfで良い >>787
そうとは限らない
単にリストの要素数が0ならそれでいいケースも多い
そう考えると明らかに初期化を忘れてるのが分かるという意味でnullを入れておくのもいいかもしれない Androidなどで、非同期処理が関わってくると、
valは注意して使わないといけない場面が、意外にたくさんあることに気が付く。 Activityのbindingはby lazyのval
Fragmentのbindingはlateinit var >>765
そもそもローカル変数の話なのかプロパティの話なのか… emptyListってシングルトンだから生成コストがないってのは分かるんだけど、
今時その程度の生成コストを気にする場面ってそんなない気もする
富豪的プログラミングなんて言われるかもしれんけど、もはやそれ自体死語だしな >>793
ローカルならそもそも悩まない。
val且つmutableにして都度addallするか、var且つimmutableで丸ごと置き換えるか、はケースバイケースで。 プロパティの話ね
mutableにしてもそもそも生成は別のところでListごと作るからmutableだろうがListだろうが関係ない
当然後から代入するからvalにはできない サーバーサイドばっかだからかもしれんがプロパティにMutableListを使うことがそうそう無い
データクラスのコンストラクタ引数に val list: List はよくある サーバーサイドかどうか関係なくない?
俺はよく使うよ。例えばツリー構造になってるデータを読み込む処理で自分の子ノードのリストを持つため、とか、これ昨日書いた。 val text = ""
って
val text :String = ""
って書いた方がいい? >>802
やるメリットは特にない
むしろ本当に宣言通りStringかどうかチェックするぶんビルド遅い >>802
いらない。何をどう見ても明らかにStringだから意味ない。 Kotlinに、SwiftのExpressibleByStringLiteralみたいなのが無くて本当に良かったと思う
あれは呪いだ >>802 は、IntelljIDEA か Android Studio 使ってないのかね?
警告消して緑色になるようがんばれ
おれは警告にどうしても従えない場合でも、アノテーション使って絶対緑色にする >>806
PHPだと1リクエストごとにFWの初期化処理を行っているのが遅い理由でしょ
特にLaravelは読み込むファイルも多いし重い
他の言語だとアプリケーションサーバ起動時に一回だけ初期化処理をするので1リクエストあたりの処理が少ない
PHPでもSwooleやReactPHPなどを使えば同じことはできるけど、まあ既存のFWを乗っけてもバグりやすいだろうね android用途:元気
サーバーサイド用途:全く流行らず
kotlin/native: 瀕死
kotlin.js: 死亡
現状こんな認識なんだけど合ってる? >>815
Kotlin nativeはなんかもう不死鳥とかみたく蘇ったりする予定なので書いておいてください /NativeがGraalにやられても/JVMがスイッチするから大丈夫 nativeはまだ作成中みたいな感じなので瀕死とは違うと思うが Kotlinを勉強し始めたんだけどさあ
これってレファレンスを見てエディタで打ち込む->kotlincでコンパイル=>javaで動かす・・・・ってのを繰り返さないとならんの?
Swiftに言う「swift asdf.swift」みたいなのに相当するコマンドはないのかしら そうか。合ってるか。。
サーバーサイド kotlinが流行ってないのは何でなんだろ。
現状問題なく使えるように思うけど、ほとんど開発案件出てこないね。 >>822
IntelliJ(community版)を使おう
再生ボタン一つで済む >>822
まずintellij(IDE)をインストールしないと始まらない このスレ定期的にkotlinc使う奴が出てくるよな
どこぞの入門サイトに書いてあるんかね
どう考えてもintellij使う前提の言語なのに >>823
サーバーサイドKotlinで生きていきたいけど、仕事なさすぎて難しいよなあ >>822
Kotlinを書くのにエディタを使うのがそもそも間違ってる。
無料版でいいからIntelliJ使え。 うちはサーバーサイドで使ってるわ
ほぼ俺しか書いてないが YouTube に動画をアップしてる、KENTA でも、
サーバーサイドの、Elixir, Kotlin などを受注するのに苦労してる。
彼は、変わった言語の仕事に、こだわる
こういう仕事は、滅多に出回らないから、ツテから入るのかも。
KENTAは千以上、名刺交換してるとか
彼は、GUI は嫌いらしい。
画面の修正で、時間を食うのが、嫌いらしい
数ピクセル、位置が違うとか、
修正したら、違う人が、元に戻せと言ったりw
GUI は、技術を学ぶ、時間効率が悪いから、嫌いらしい。
だから、サーバーサイドの仕事を取る サーバーサイド普通に使ってるぞ
lombok駆使するよりいいと思う >>830
「、」で区切り過ぎ。その文章の場合は全ての「、」を削除した方が読みやすい。 >>822
IntelliJ 使った方が楽だが、kotlinc でコマンドラインでやるとしたら最後の実行は kotlin コマンドでできるよ。
kotlinc xxx.kt
kotlin XxxKt
みたいにする。
kotlin コマンドは環境変数セットしたりして最終的に java を動かす。 で、サーバサイドkotlinのこれからについての認識なんやけど合ってる?
・実戦投入可能なレベルに達している
・goが選ばれるような案件では以下の点でgoに勝てないので流行らない
→粒度の細かいマイクロサービス:deploy容易性がgoに劣る、kotlinの抽象力が活き辛い
→aws lambdaとか:上記に加えてjvmが温まるまで遅い
・モノリシック案件のbetter javaとしては第一候補
→フルスタックFWが有望でspring bootが最有力
→必然的にSIerの仕事が多くなる
・SIerが最重要視するのは実績
→実績を積むには待つしかない kotlin/nativeは「hello world」を「hello world!」にするだけでビルドに7sかかるんやけど。。
こんなもんなん?何かやり方間違ってるのかな。 >>837
受託の業界は知らんけど、WEB業界なら今までJavaやらScalaやら使ってたところはもう大体使えるところから使い始めてる。
ただそもそも日本のWEB業界ではJavaが不人気過ぎてどうしてもニッチの部類に留まってるわな。
生存戦略としてはとにかく仕事の多いRailsやらをやるか、仕事は少ないが応募者も少ないKotlinを極めるか、まあどちらでもありっちゃあり
どうせ5年後には違う技術が台頭してるし 既存のJavaからKotlinはあっても、そもそも新規でJVM選択するかなっていう sunが震え声で
ハードの進化でJVMのパフォーマンスは向上していくから…
って言ってから何年経ったのか PHPで作ってたけどパフォーマンスが出なくなって来たからJavaで作り直す、みたいなのはよく聞くな
同じ理由で昔はRailsからJavaってのもあったけど最近のRailsは速いからあまり聞かなくなった Rails ができれば、コピーのCakePHP も出来る
違う言語だけど 新規でサーバ側でkotlinで作ってもらったけど
少数派なのか。
まあ、何ができるかが大事だからいいけど、流行に左右されるのは厳しいね。 >>841
20年ぐらい?
まあ確かにあのWindows95だの98だので動かしていた時よりは速くなったけどね。 結構Java嫌いな人多いんだね。自分もJavaは好きじゃないけど。
>>840
Javaが検討される規模のWEBサービス作る時にJVM以外の選択肢って例えば何かあるのかな?
>>841
Javaの出始めと比べたら劇的に進化してSunの言う通りになったと思うけどな。
Java離脱組もパフォーマンスじゃなくて開発効率やサービスの拡張性を気にしてる。
>>846
少数派なのはそうなんだけど、依頼側から見たサーバーサイドkotlinのデメリットは
・現状では開発者が少ない=人が集まらないことによる遅延、開発者単価
・実績がない=未知の何かが起こるかも
なのでローンチ出来てる時点でデメリットは乗り越えているし、
Android界隈では確固たる位置にいるからこの先メンテ人材が見つからない心配もない。(←ここが流行に左右されて困るポイント)
悪くない選択だったと思うんだけど JVMの性能は実行時最適化が強みだから
ベンチマーク系は不利
巨大なプログラムで長時間の動作において有利なはず
にもかかわらずベンチマークでもそこそこ速いんだからすごいのでは いや実行時最適化は繰り返し実行される処理に対して効くからベンチマークには強いぞ
立ち上がりの遅さとか、ベンチマークに現れない体感的な部分がJVMは遅い
事実上サーバー専用だから仕方ないが JVMはガーベッジコレクションでスローダウンするから未だに使い物にならない。
一番大事な時に直撃で機会損失が億いくと違約金も凄まじかったぜ。 果てしなく嘘くさいな
シビアなシステムでどれだけ使われてると思ってるんだ 10年以上前からあるコンカレントGCすら知らないような会社なんだろう 業務用Javaに関しては新機能が使われずなおかつアプデなしで10年経過とか普通にあるからな
それはそれでもいいから対外的にJava語るなって話なんだが 例のみずほのサグラダファミリアもJava1.5という噂を聞いたけどマジなんかな ネイティブでgc使わないようなコードも出せるようになればなんとかなりそうな気もするが、そうするとライブラリもそれ用のを使わないとダメか。 JVMが使い物にならないという人が何を使っているのかとても気になる jvmの引数でもGCのラグを解消できるし
最新のZGCというのも出てきた JVMというかspring fwの起動が糞遅いのは分かる
2.0になって少しましになったけど… 気のせいかわからんがKotlinでspringやると遅いような気がする >>876
ktorはマイクロサービス向き
kotlin/jvmはモノリシック向き
kotlin nativeが流行らないと無理やと思うで >>864
コンパイル時間は長いと思うけど、アプリ本体は変わらん。
というかそもそもspring本体はJavaだし。 >>866
Ktorをその並びで並べるのはちょっと違うと思う。 >>868
kotlin/jvmはJava代替でSIerによるフルスタックFW&モノリシック開発が向いている
kotlin/nativeはGo代替を目指していてWeb系企業のマイクロサービスが向いている
kotlin/jvm+ktorではGOに勝てるユースケースが無いので
ktor流行にはkotlin/nativeの流行も必須というのが自分の主張。
まあ異論はあると思う。ちなみにkotlin/nativeは応援してるしktorも流行ってほしい >>822
vim + quickrunで動くよ!
kotlinc, javaなんてコマンドを打つことはしない。 >>869
言ってることは分からなくもない。
ただ視野が狭すぎるというか、そんな可能性を狭めなくていいと思う。 そもそもKtorってJVM、というかServletに依存してね 次のリリースでkotlin/nativeのbuild時間が改善されそう
リリースいつなんだろ。。 kotlin/nativeはGraal(AOT)に勝てるかどうかすら怪しいのに、夢見過ぎだろ。 >>876
AArch64の対応が進んではいるもののGraalがiOSに対応するのは当分先
Kotlin/Native側も資産(ライブラリ等)不足やパフォーマンスの課題があるけどな >>879の補足
Graal側はAArch64/Linux対応が完成してからiOS対応をやるかどうか検討するとのこと
https://github.com/oracle/graal/issues/373#issuecomment-454697157
まだAArch64/Linux整備中の段階
https://github.com/oracle/graal/commits?author=sanzinger&since=2019-05-15&until=2019-06-07
iPhone/iPadのチップ : A10〜A12X : ARMv8ベース
ARMv8の64ビットモードがAArch64 kotlin/nativeのメインターゲットはiOS開発なんだろうと思う。 Swiftネイティブでいいじゃん、他にはUnityもあるし。
入り込む余地ないでしょ。 kotlin3大いいところ
・android標準という安心感(直ぐには廃れない)
・モダンな書き方ができる(arrowもあるし)
あと1つは? >>885
Listが基本immutableなことやnull安全はモダンに含まれるのかな?
標準という意味ではGradleの記述言語としてもサポートされているので、廃れにくいかなと思っている。
個人的にはDSLを3つ目として挙げたい。 JVMで動く言語でJavaのライブラリそのまま使えるのが良い
これに関してはKotlinである必用はないのだが、その他の利点の上に更にこれがあるのが良い 最新のjavaも随分進化したから、そこまでkotlinにこだわらねえ。
kotlinがjavaや.netみたく自前の最初からnull安全なクラスライブラリ備えてるなら別だけど。 逆にあえてJavaを使う理由が特に思い当たらんからとりあえずKotlin使うわ Javaに新機能が追加されてもざんねんなJava部分が消えるわけではないので
可能であるなら最初からKotlinでやりたいかな >>888
自分も最初はラムダもOptionalもあるからとそう思っていたけど、immutable programmingで行こうと思った時に、
Listがimmutableであることを保証する方法がないことに気づいてKotlinへの移住を思い切った。
immutable programmingはそれほど実現しなかったと反省しているが、
Kotlin/JSやbuild.gradle.ktsとかも出来たので後悔はしていない。 うちももう新規追加は全部Kotlinだわ
だってJavaで書くメリットがマジで何もないんだもん coboちゃんが入れ替わっただけの蛇腹は逝ってヨシ >>893
Java経験あるならKotlinなんてすぐ書けるから別に気にしないよ。
社員で雇うならどの言語で書いてたかはあんまり関係ない。 kotlin書いてる人は何の仕事してるの?
やっぱandroid? サーバーサイド
7割SpringBoot3割sparkその他 2年くらい前まで都市伝説レベルだったサーバーサイドKotlinも最近は勉強会でよく見かけるようになったんだ できればkotlinで作りたいって言われてサーバー側のプログラムを作ってもらった。
DBサーバは別で画面制御だけ。
自分でも勉強しようと思ってこのスレッドを見てるところ。 そっか。サーバサイドkotlin順調に普及してきてるんやね。ワイの周り以外では。
うらやましい! ほぼ0だったのがようやく1になったくらいで、まだまだマイナーだけどね kotlinは関数型も取り入れてるし
色々欲張り過ぎで言語仕様複雑化してるイメージがあるんだけど
実際使っててどうなの?
kotlinプロジェクトはコーディングスタイルが多様化しそう AndroidStudioやVSCode(mathiasfrohlichのKotlin Language機能拡張)で学習してるんだけどさ
どちらにしてもスペルミスは文字の色である程度わかるけど、文法が間違っててもその場で指摘してくれるわけじゃないのね
ある程度身につくまで文法間違いやを教えてくれるとありがたいんだけどそういうのはないのかな? 文法間違いとはなんぞや
一応、実行できないくらい間違ってる場合はIntelliJ系だと「現時点で解釈不能でわけわかんないです」「これを書いてるつもりの場合は〇〇が必要です」って下に英語でちょろっと出る kotlinのバグ発生率はJavaより低いですか? Javaのバグ発生率を教えてくれたら考えてあげてもいいよ
同じような式で計算して出すから >>905
具体的にどういうこと?
VSCodeは知らんけどIntelliJは大抵のミスは教えてくれると思うけど >>909
https://web.cs.ucdavis.edu/~filkov/papers/lang_github.pdf
>Java−0.01 (0.04)
Javaはいろいろな言語の中で平均的なバグ発生率のようです。
Kotlinはこの表にありません。 Javaのバグ発生率は、
同じ領域で使われていると思われるC++,C#,Pythonと比べて最も低いです。
つまり、カーネルやデバドラやブラウザ系でなければJavaが一番優秀に思えます。
しかしKotlinはJavaを打ち倒すかもしれません。 ぬるぽ
ぬるぽ
出まくるが
これはバグじゃないのか その比較研究はgithubのコミットに基づいているようなので
ほとんどのNPEは開発中に発生して修正済みでしょう。
最初からNPEを発生させないkotlinは、
むしろバグ発生率よりコーディングスピードで優れているかもしれません。 その類の実証研究、大抵がJava対象だからKotlinだとどうなのかとかはまぁ分からんよね kotlinだとコードの行数が減るからjavaに比べて開発規模が小さかったと判断されてしまう kotlinの言語仕様的にjavaよりバグり易そうな部分ってあるんかな? >>918
it や this が思ったものと違うものを指していたとか。 確かに。let 周りで失敗してたことあったわ。あの辺はちょっと複雑になっちゃってる感あるね。 KotlinはTypeScript, Swift, C#あたりの典型的なモダンCファミリーの範囲を超えてオリジナリティを出してきた部分については途端に微妙になる印象
当然っちゃ当然なんだが、天才的なものは感じないね Javaはエラーコードを強制される部分があって、プログラムの質の底上げがされてるんじゃないかな なんかもう、わかんない人は無理に会話入ってこなくていいよ たぶんJavaにあってKotlinに無いものは無い
強いて言えばKotlinは関数型を採り入れて言語仕様が複雑化しつつあるし
Javaとの混在が可能だからごちゃごちゃしやすい
人によって書き方が変わりやすい
あとGSONとの連携で問題が生じやすいとかあったはず 検査例外ちゃんは皆に嫌われてるから…
投げられた例外を捌けるかどうかは呼び出し元の都合や要件に依るからcatchを強制されるのは好かん
て雲のジュウザが言ってた マルチパラダイムな関数型言語はどう設計していくのが良いのか難しいと思う
OOPと関数型は根本的にミスマッチしてる ポインタさえなければ、バグの出やすさは誤差の範囲じゃないかな Android kotlinで言えばMVVM一択だろ
悩むほど選択肢はない >>926
関数型とも相性が悪いが嫌わないで下さいませ >>929
そうかな
イミュータブルオブジェクトと関数型は相性いいと思うけど OOPそのものじゃなくてクラスでデータと関数が密結合してるのがいまいちという話は感じる 本質的にはラムダ/クロージャでの束縛と変わらないと思うけどな これが f(g(immutableData))
こうなる immutableObject.g().f() >>918
わからない。なさそうな気がするが、KotlinにはKotlinなりの何かハマり易そうな部分があるのだろうな。弱点というかなんというか。 宮迫の闇営業の件で何をトチ狂ったか、宮迫が出演する番組のスポンサーが
JetBrainsだと勘違いして開発者達にお問い合わせメール送りまくってるの草。
JetBrainsと宮迫は関係ねーよw 何の話か全くわからない。
かといって聞いても面白そうな話ではないので詳しく聞きたいとも思わない。 JetBrainsがテレビCM出してるの想像したらワロタ
オカンが「あらDataGripもいいわねえ」とか言うのか プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。 >>944
まあ芸能関係は全く注目してないからな。
しかしのめり込む人は思い切りのめり込むね。
芸能人批判するとか、なんで自分と関係ない他人の事にそんなに夢中になれるのか謎だ。 EBライブラリってのをdownloadしてcompileしてみた。
http://www.mistys-internet.website/eb/
ドキドキしながらsamplesを動かすと、動いてるみたい。
このライブラリを使えばEPWING辞書データにアクセスする事ができる。
俺の場合、手元のジーニアス大辞典にアクセスできた。
こいつでAndroidアプリ、辞書Viewer作れば需要あるかな?
EPWINGだけでなく、辞郎形式のテキストにも対応しちゃう事にする。
Qiitaへ投稿されたMouse Dictionaryみたいなのを目指すけど、需要あるか、ちょいと心配。 >>949
ジーニアスのアプリがほしいと思っていた時期が、私にもありました。
でも、今や単語を選択して右クリック(長押し)->webで検索で済むと気づいてからは、
なんということでしょう。それまで高まっていた物欲が嘘のように消え去りました。 EBライブラリ、ソースのtimestampが2010/01/03と随分古い。
動かすとテキストがeuc-jpで出て来た。
これは、辞書に依存するのか?それともEBライブラリの仕様か?
2010年ってまだ、UTF-8が普及する前なのか?
そういえばYahoo Japanのフロントページが以前はeuc-jpだった気がする。けど、何時だったか思い出せない。
多分、Ruby 1.9が出現したころだから、これも2010年辺りか?
iPhoneと共にutf-8が普及し出したから2007年にはutf-8は普及の兆しがあったはずだが。 >>950
ジーニアス大辞典、良いよねぇ。
citeを引くと、excite, reciteと語源が同じって出てくる。
やっぱり、EPWING辞典の需要って少なそう。 >>952
その頃にはUTF-8が覇権を握り始めてたけど、LinuxのデフォルトがEUCだった頃の名残はまだまだ濃かった
特に人の意識でEUCが標準って感覚の人がまだ多かったね twitterを電子辞書をkeyに検索すると、デバイスのお絵かき機能を使った落書きが、大量にヒットする。
学生さんは、授業中、イラスト描いてるらしい。
けど、画風が皆、似通ってるのはなぜだ?アニメ世代ってのは、あんな絵が好きなのか? EPWINGって何の略?
必死にググったけど、WINGの部分が良く解らん。
EP = Electronic Publishing
ってのはすぐ気がついたけど。
あとEPWINGの仕様で、データはEUC-JPで格納されてる様だ。
EBライブラリのREADMEはISO-2022-JPで書かれていた。
時代を感じる。まだ、10年も経ってないのに。 >>955
アニメの絵にも流行りがあって時と共に変化していくんだよ。
昔の同時代のアニメを見るとそれはそれでなんとなく似ていたりする。 UTF-8がWindows10にも普及しているのか?調べてみた。
2018年末最新のWindows10からUTF-8採用って事みたい。
ごく最近ッてことだ。おそろしい。きっと混乱はまだ続きそう。 メモ帳でutf-8使うとBOMってのが付くのが憎悪しかない MSはsjis系のテキストファイルと区別するためにUTF-8のテキストファイルにBOM付けたかったんだろうが、Unix系の人達の激しい抵抗に屈した形だな >>960
もはやWindowsだけが浮いてて他は統一されている >「BOM(バイト・オーダー・マーク)なしのUTF-8」が追加
>デフォルト設定でBOMなしのUTF-8を選択するようになった
もうBOM付かないんですか!やったーー!AA略 ExcelがBOM無しCSVに未対応じゃないすか!やだーー! UTF-8のデメリットは、1文字が1 - 6byteの可変長であること。
例:a = 61, 1byte
😀 = F0 9F 98 80, 4byte
これ、文字列バイナリデータが与えられた時、文字数ってどうやって数えるんだ? UTF-8 のメリットは任意のバイト位置で
それが何バイト必要な文字なのかと
その文字中の何バイト目かが判ることなんだが >>968
そうなのか!知らんかった。
では、80と出てくるとその文字は4byte必要な文字の1バイト目だと判るのね? 文字数という意味ではUTF-32でさえも可変長だよ
異体字セレクタとかあるから >>967
1〜4バイトでは?
>>968
文字の最初の1バイト目かどうかがわかるだけでは?それがわかると全体で何バイトかわかるけどいきなり途中の1バイトだけ見たらそれが何バイト目かはわからんと思うのだが。 名前がコトリンだからあなどられて、ばかにされそうだけど
そこんとこどうなの? 本当はSwiftより先にあったらしいけどさ
なんか言語学習を混乱させるために出てきた「後発劣化Swift」みたいな感覚が抜けないな Swift1.2〜3.2くらいまでアプリ開発で使いつつ
MLでの言語仕様の議論追ったりしてたけどKotlinと比較してそんな印象は無いなぁ
むしろSwiftがSwiftユーザーを混乱させる勢いだったよ バカにする者の居る国の沿岸に Kotlin class destroyer でも派遣してやりなさい。 >>971で合ってるよ
10FFFF上限で5バイト以降は廃止されたし
2-4バイトは後続バイトであることは分かっても文字中のバイト位置の逆算は不可 >>979
君よりは足りているように思えるのだが。 >>982
このレス、プログラム板のあちこちでみるけど何?
板にキチガイが常駐してるの? デジタル人格は死んでも本体が生きていればいくらでも復活出来る くだすれPython(超初心者用) その43【Ruby禁止】
Python スレのテンプレを勝手に改変して、荒らしてる奴。
「Ruby 死ね」とか、いつも書いてる
Ruby, jQuery, Lodash, ライブラリの話は禁止とか、
テンプレを勝手に改変して、多くのスレを建てる荒らし!
荒らしの特徴は、いつも30分以内に、2回書き込んで自演する。
複数人いるように、見せかけるのが特徴 >>996
落ち着け。>>982の真似に過ぎない。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 197日 16時間 23分 8秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。