Kotlin 7

■ このスレッドは過去ログ倉庫に格納されています
2020/05/06(水) 16:00:38.76ID:LXTBA+hx
JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう

※前スレ
Kotlin 6
https://mevius.5ch.net/test/read.cgi/tech/1561186797/
2020/05/27(水) 23:10:26.73ID:DTRuzdOO
>>22
なるほど、その説明なら腑に落ちるわ
サンプルのコピペってのは盲点だった
2020/05/27(水) 23:18:32.13ID:3WNNb2zm
>>25
まじでっ
2020/05/28(木) 16:06:27.07ID:z89Mb2xs
Kotlin のコンパイラはココにあるよ
https://github.com/JetBrains/kotlin/releases/latest

scoopを使ってインストールするなら
https://scoop.sh/

>scoop search kotlin
'main' bucket:
kotlin-native (1.3.72)
kotlin (1.3.72)
>scoop install kotlin
2020/06/01(月) 01:59:19.84ID:zzgI+kvb
そもそもJavaで良いんだよ。
2020/06/01(月) 02:44:32.50ID:6KBAlGQt
Windows 10 で IntelliJ IDEA の Community の新しいやつ (2020.1 とか 2020.1.1 とか) の起動ができない。
2019.3.5 はできて普通に動く。なので 2020.1.1 にアップデートしたくても出来ない状態なのだが、これ解消出来た人居る?
Windows 10 Home と Pro 両方試したんだけど症状は同じ。

IntelliJ IDEA の Ultimate の方は起動できたが、今の所これを使い続ける予定なし(今は完全に趣味で個人的に学習用
として使ってるので Community の方が良い)。

起動可能なまともなのが出てくるまで待つしかないんだろうか? まあフリーだしそうなったとしても仕方がないけどね。
2020/06/01(月) 07:36:25.09ID:cdzKAQgn
>>30
Community 普段使ってないから試しにインストールしてみたけど普通に起動するよ?
Windows10で、2020.1.1
32デフォルトの名無しさん
垢版 |
2020/06/01(月) 07:42:09.63ID:cdzKAQgn
これとか参考にしてみたら?
https://blog.jetbrains.com/jp/2020/04/11/2966
33デフォルトの名無しさん
垢版 |
2020/06/01(月) 09:12:52.23ID:h4zHZIPt
>>29
うっそーん!
getter, setter書かなくても良いだけKotlinがマシ。
2020/06/01(月) 09:22:09.26ID:O16m8Efv
俺的にはnull安全とwhen句あればあとはいいかな
35デフォルトの名無しさん
垢版 |
2020/06/01(月) 09:58:29.45ID:h4zHZIPt
>>966
>プロトコルとインターフェースは呼び名が違うだけ
>
>JavaのインターフェースはObjective-Cのプロトコルを真似して違う名前を付けたもの
>SwiftはObjective-Cからプロトコルという名前をそのまま受け継いでる

Swiftは変数に値型(Struct)とそれのCopy-On-Writeを活用した言語。型の抽象化をする際にProtocolが使われる。
Javaの変数は参照型(Class)しかない。型の抽象化もInterfaceが使われる。

Swiftは値型を使って高速化と省メモリを実現しようとしているが、残念ながら今のところ、実現出来ていない。言語仕様が肥大化してるからか?
2020/06/01(月) 14:24:04.07ID:6KBAlGQt
>>31
えー。じゃあこっちの環境の問題か。
なんだろう?とりあえず色々入れてしまったプラグインをアンインストールしてからやってみるか。
2020/06/01(月) 14:25:29.53ID:6KBAlGQt
>>32
ありがとう。見てみる。
2020/06/01(月) 17:58:44.28ID:6KBAlGQt
>>31>>32
日本語化の Pleiades が怪しい感じだったのだが色々やってみても症状変わらなかったので
面倒だからもうアンインストールして残骸ファイルも全て削除して何もない状態にしてから
インストールしたらうまく行った。やはりこちらの環境の何かが悪かっただけだった。とほほ。
2020/06/07(日) 00:57:41.55ID:3X7+PvZO
>>38
2020.1からJapanese Language Pack EAPがインスコできるようになったからそれと競合してんのかもね
2020/06/09(火) 11:56:12.99ID:wImvczbn
現在日付がその月の第何週の何曜日かと言う情報を取得する方法はありますか?
2020/06/09(火) 14:10:06.85ID:SGOz4tpD
KotlinじゃなくてJavaでググれば一発で出てくるよ
2020/06/10(水) 02:14:58.25ID:jMnmbCBs
現在Androidアプリを作っています
アプリのアップデートがある場合、アプリ起動時にその旨を通知する仕組みを実装したいのですが下記記事の方法で可能でしょうか?
まだリリースはしてないため動作確認ができないので教えてほしいです

また、この機能の動作確認をするには製品版もしくはベータ版でオープン状態でストアに公開しないとダメですか?
アルファ版と内部テスト版は公開ストアからのダウンロードではなくダウンロード用URLからアプリを端末に落とす仕組みのようなので、、。

https://developer.android.com/guide/app-bundle/in-app-updates?hl=ja
43デフォルトの名無しさん
垢版 |
2020/06/11(木) 02:35:42.07ID:JaXQwSJJ
>>39
なるほど。

>>40
例えば java.time.LocalDate クラスを使うと曜日が分かる。
後は算数の問題だな。週が月曜日始まりの場合は日の値から曜日の値を引いて6足して7で割って1足すと第何週か分かる。
Kotlin だとこんな感じで一発で出せる。
val n = LocalDate.now().run { (dayOfMonth - dayOfWeek.value + 6) / 7 + 1 }
週が日曜日始まりの場合でもずらせばいいだけなので分かると思う。
2020/06/11(木) 17:57:33.71ID:VnkliXLF
ずらさんでいいようにしようよw
2020/06/11(木) 18:11:45.18ID:VnkliXLF
勘違いしてた
なってるか
46デフォルトの名無しさん
垢版 |
2020/06/12(金) 00:27:32.97ID:Kaf1DLZ6
さっき気づいたこと。

""" で括るとどんな文字でもそのままになると思い込んでいたが、 $x みたいに変数埋め込みは効いていた。
"""$""" とか """$$""" みたいなのは大丈夫だが """$x""" みたいにすると変数 x の内容がそこに展開されるか、
または変数が宣言されていないならコンパイルエラーだ。じゃあ本当に文字列として """ の内側で $x と出したい
場合はどうするのか? もちろん """\$x""" は \ の効き目がないのでダメ。("\$x" で良いのは分かっているが、
""" で括られた長い長いエスケープを無視したい文字列の中の一部だけが $x になっていた場合に使いたい)。

散々色々やってみて """${'$'}x""" と """${"$"}x""" と """$${""}x""" と """${"\$x"}""" でやっと $x になった
のだが、もうちょっと見易い方法ないものか?

あ、もう一つあった。 val x = "\$x" とやっておいてから val s = """$x""" とする方法。しかしこれだと x を他の
事に使えない。
47デフォルトの名無しさん
垢版 |
2020/06/12(金) 00:35:45.67ID:Kaf1DLZ6
同じ事書いてる人が既にいた。
https://www.yo1000.com/kotlin-heredoc-escape
2020/06/12(金) 01:36:09.75ID:su7sNT78
>>46
同感。
$が有効なraw stringはそれなりに便利なので
$無効なraw stringと両方あればよかったのにと思う。
2020/06/20(土) 12:33:39.14ID:tLA+K13d
変数宣言時の型後書きが激しく気持ち悪いけど、なれてきたらこれはこれでありかなって、この前豆腐ヨウ食べながらそんなことを思った。
2020/06/20(土) 14:03:24.20ID:zwBEwaPL
昔からPascal系やBasic系は型後置なんだからどちらが流行った時期にプログラミングを習得したかの差でしかないやろ
型推論がある言語なら
var v
var i: Int
のように省略可能な方を後に書き足すのは一貫性があって適していると思う
2020/06/20(土) 15:27:49.66ID:JeszpXBy
省略可なのに書かないと気持ち悪い
2020/06/20(土) 15:30:42.17ID:C+yLxgcn
Android Studioなら推論された型を表示させる機能好き
53デフォルトの名無しさん
垢版 |
2020/06/20(土) 23:47:18.56ID:+7UFHvJ6
>>51
しかし段々と快感に
2020/06/21(日) 01:05:03.79ID:tsiNgl4R
floatじゃなくてintに変更しよう!
と思ったら既にintだった
2020/06/21(日) 05:45:15.17ID:V7E9tL91
>>49
新しく言語を始めた時の違和感は強烈だけど結局は慣れの問題。
>>51
Javaのvarでも、使って型を省略できる場面でも省略しない方がいいこともあるって公式見解があって
たとえば>>54のようなケースは省略しないことが推奨されている。
2020/06/21(日) 09:14:33.39ID:DCUagNbF
>>51
わかる。
後から見返したとき、結局型なんやねん!?ってなる。
プログラムの可読性の観点から省略しない方がいいと思うんやけどなー。
2020/06/21(日) 11:10:08.30ID:tsiNgl4R
小数点以下を消したりf消すだけで勝手に変わるからね
2020/06/23(火) 21:19:00.59ID:EVBfRnLN
なんかメディアに登場してて興奮した
https://www3.nhk.or.jp/shutoken-news/20200623/1000050496.html
画面右側
59デフォルトの名無しさん
垢版 |
2020/06/23(火) 21:34:21.04ID:5POR+uA5
>>58
え?これ?

https://i.imgur.com/Gq4hZGA.png
2020/06/23(火) 22:36:31.25ID:UicElvK7
>>59
ざまりんちゃんってスレチじゃねえか!>>58
2020/06/24(水) 10:42:37.73ID:l/oN1z1j
このスレでもすっかり人気者ですね
62デフォルトの名無しさん
垢版 |
2020/06/24(水) 21:47:23.43ID:kW+E8aQE
座間のゆるきゃらか。

座間と言えば座間9遺体事件のあった所だな。
2020/06/24(水) 21:50:15.79ID:GiTbKjWf
座間といえばひまわり畑だろ
2020/06/24(水) 22:18:03.71ID:cNRckdT9
ひまわりちゃんならゆるす
2020/06/25(木) 14:43:48.63ID:eCZ5+gte
viewModelでLiveData書くときいちいち
private val _liveData = MutableLiveData<Unit>()
val liveData: LiveData<Unit> = _liveData
するの面倒臭いんですけどMutableLiveDataをそのまま公開していいよね
MVVM的にはviewからviewModelへの参照は良いわけだから別に
viewから書き換えられたっていいじゃない
2020/06/26(金) 16:15:15.83ID:AQU4UGjn
Readonly<This, Read> where This : Read {
fun asReadOnly(): Read
}

interface MutableList<E> : List<E>, Readonly<MutableList<E>, List<E>>

...あんま意味ないね
2020/06/26(金) 19:56:22.26ID:TOspcwsI
viewModelでcoroutine使うときviewModelScopeを使うじゃないですか
その通信処理をviewModelからその先のmodelクラスに移すと
そこにはviewModelScopeがないんですがどうしたらいいですか
2020/06/26(金) 20:18:15.02ID:AGSha9JG
染めそもそんな変なもん使わんわ
2020/06/26(金) 22:57:53.81ID:gj0o7pXU
移さなければいいんじゃないかな
2020/06/27(土) 17:46:24.81ID:/Jl2bJji
別のviewModelから同じ通信処理を実行したいとなったときにmodelで共通化したいじゃない
2020/06/27(土) 21:29:41.49ID:/bVKxYKR
Androidよく知らんけど、処理の実態だけ他に移してCoroutineの生成はViewModelに置いておくとかじゃだめなの
2020/06/27(土) 23:43:22.01ID:L1te99rx
android知らんならレスすんなよ
73デフォルトの名無しさん
垢版 |
2020/06/28(日) 00:30:03.47ID:Shxo8sD9
Androidでcoroutine使ってうれしいのはViewModelのライフサイクルに合わせて無効になった非同期処理を虐殺してくれるところだろ
Modelに移しちゃったらそれができなくなるやん
2020/06/28(日) 01:28:04.55ID:L5Cpw8A4
contextとconstructorがわからん、、、
2020/06/28(日) 02:22:21.40ID:VdXbwnMJ
viewModelScopeはviewModelの中のままで
中の関数だけsuspend funでmodelに移す感じですね
2020/06/28(日) 14:02:17.94ID:0hqWLDMA
Javaのサンプルプログラムではconstructorでcontextを何かやってるんだけど(main activityとviewを何か繋いでる?)
kotlinに置き換えたときは省略可能?
なんか書かなくても動いてしまって逆に不安
constructorで囲わずに変数宣言して代入もするなら不要?
contextを何かやろうと後回しにしてたとこコメントアウトしたまま、、、w
2020/06/28(日) 15:05:03.13ID:VdXbwnMJ
カスタムビューのコンストラクタ?
2020/06/28(日) 15:24:42.47ID:0hqWLDMA
いまやってるのはsurface viewのクラスです
その前は普通のviewクラスでonDrawの中で線を多数描いてたんだけど、このときはなんとなくconstructor書いてその中にcontextもありました
それをsurfaceviewに変更してたらconstructor周りでエラーが出て、鬱陶しいからコメントアウトして他触ってたら普通に動いてなんじゃそれwってなってます
viewクラスで書いてたプロジェクトに戻ってみると、constructorの関数?って言うのかな?が黄色の警告になってて、実は削除できる?と(試してないけど)
なんか余計にcontextが分からなくなったw
kotlinから始めたからプライマリとセカンダリに分かれて何がいいのかすらも理解してないですw

いったんjavaで修行しようかな?と思う
資料も多いし、何かコツ掴めるかもしれない
遠回りだけど
2020/06/28(日) 16:28:20.82ID:h6Ozp34k
>>74
context(文章の前後関係の繋がり、文脈)
constructor(建設者、建造方法、生産手続き)

例えが良くないかもしれないけどJavaでいうと
ViewはFlameに直接描画してるような感じで
surfaceViewはpanelに描画してからFlameに貼るイメージかな
2020/06/28(日) 16:50:28.61ID:VdXbwnMJ
SurfaceView継承して紺巣トラクタなしだと普通にエラーなるが
81デフォルトの名無しさん
垢版 |
2020/06/28(日) 17:16:02.82ID:YhC9oGcZ
>>80
AndroidのSurfaceViewの基礎
https://qiita.com/croquette0212/items/24dc2b6de3730e831aab
2020/06/28(日) 17:22:58.88ID:YhC9oGcZ
>>80
panelだけだとWindow表示出来ないからエラーなるよ
ガラスだけで枠が無かったら窓じゃないようなもん
2020/06/28(日) 22:28:58.13ID:Shxo8sD9
KotlinでAndroidのViewを継承するならプライマリとセカンダリコンストラクタは必須だろ
でも特別なことやるわけじゃなければ、init{}にViewのインスタンス初期化時の処理を書いて、
あとこの三行コピペするだけでいいからKotlinは楽ちんだ
constructor(context:Context):super(context) {}
constructor(context:Context,attrs:AttributeSet):super(context, attrs) {}
constructor(context:Context,attrs:AttributeSet,defStyleAttr:Int):super(context,attrs,defStyleAttr) {}

contextとかconstructorの理解は後でもいい
class の行には context 書くなよ
84デフォルトの名無しさん
垢版 |
2020/06/29(月) 14:51:01.90ID:o17FnYvx
同じ jar ファイルの中に入っている設定ファイル(要するに普通のファイル)を読む時は
クラスローダのインスタンスを取得してから getResourceAsStream() で InputStream の
インスタンス作って読み出すみたいなことをすると思うのだが、Kotlin ではこれは普通は
どうやっている?

まずクラスローダを取得するために Class クラスのインスタンスを取り出す必要があると
思うんだが、これをどのクラスにも属していない main() 関数でやろうとすると、たとえば
main.kt に main() があるとすると MainKt::class.java で良さそうだがコンパイル時に
unresolved reference でエラーになる。Class.forName("MainKt") ならできるが、
できれば文字列でやりたくない(ファイル名変更や他のファイルの関数にコピーされたら
コンパイルが通るのに意図した通りに動かない動かないプログラムになるから。せめて
コンパイルエラーで間違いが見つかるようになって欲しい)。
2020/06/29(月) 23:01:08.25ID:g8mEh1IE
くどい。素直にクラスで包め
2020/06/29(月) 23:11:12.20ID:o17FnYvx
それ以外に方法はないの?
ないならしょうがないが。
2020/06/30(火) 12:16:45.36ID:FwIuBGzE
あるいは少し反則気味に(this as java.lang.Object).getClass()みたいにするか
88デフォルトの名無しさん
垢版 |
2020/06/30(火) 15:25:08.90ID:rhjTl/Wy
>>87
それって this.javaClass なのではないか?
2020/07/01(水) 05:11:07.30ID:AKcI9U0q
firebaseのrealtimedatabaseで自分が開発したアプリからのみ
読み書きできるようにするにはどうしたら良いんでしょうか
userAgent的なものをコンソール画面のルールのところでチェックしたりできるんでしょうか
2020/07/01(水) 19:27:33.58ID:AKcI9U0q
ProgressDialogがdeprecatedですが
削除して全画面半透明viewの中心にProgressBar置くぐらいなら
ProgressBar使った方が良くないですか
2020/07/01(水) 19:34:26.43ID:eF9wthZx
>>90
そうだね、ProgressBar使った方がいいね(あげ足取り)

そうじゃなくて、
どんな場合でも画面の操作を一切受け付けなくする設計は素人の証、
だからProgressDialogみたいなものは使うんじゃねぇとgoogle様からの教えだ
黙って従いたまえよキミ
2020/07/01(水) 20:09:22.09ID:a12KSEwv
でも安全だよ?
2020/07/02(木) 05:47:16.94ID:ulMiJXWd
でも一切受け付けなくして待ちたいときあるよね
2020/07/02(木) 07:25:27.22ID:ulMiJXWd
ログイン画面でユーザー名とパスワードのEditTextと
ログインボタンしかUIがない場合に
ログインボタン押したあとProgressDialog出さずにどうするつもりなん
通信結果が返ってくるまで全部のUIのvisibilityをgoneにでもするん
それが良いUI・UXなんですかねええ
2020/07/02(木) 09:16:47.94ID:MnuZDw2f
非推奨のものを意地でも使おうとする意味がよくわからん
2020/07/02(木) 11:47:46.08ID:AcKKXw8x
むしろ非推奨にしてる意味がわからんから
2020/07/02(木) 11:54:29.76ID:5Xusq7Sp
>>96
言語仕様に論理的な正しさを求めてはダメだろう。
2020/07/02(木) 12:12:47.93ID:SlMExULc
非推奨の理由はJavaDocに書いてある
日本人は安心安全安価に異様に執着するから使いたい気持ちは分かる
米国人は自由が大好きだから戻るボタンとかが押せなくなると訴訟か銃撃
開発者にとって便利なシーンがあったとしても、安易に多用されることでOS全体がダサくて使いにくいとエンドユーザーに判断されるとブランドイメージにも悪い
2020/07/02(木) 17:18:28.92ID:wDUyJN1f
> 戻るボタンとかが押せなくなると訴訟か銃撃
まじか・・過激だな米国人は
2020/07/02(木) 18:34:20.74ID:bZhoxtgp
ログインしたけど、あーやっぱやーめた
戻ろっと、て、アレ?戻れねーじゃん、クソが!
2020/07/02(木) 19:26:28.90ID:UQCWo3pR
OpenGLと加速度センサー使った玉転がしかなんかのサンプルってないかな?
surfaceViewしか見つからない
2020/07/02(木) 19:58:07.16ID:EzfTqGB2
玉ころがしとはエロいな
2020/07/02(木) 21:25:16.04ID:FLhxmghE
てかたかだかログイン如きでRrogressdialog使うことなんてあるか?w
2020/07/02(木) 21:38:42.40ID:ulMiJXWd
銀行系のアプリ開くと全画面半透明に中央グルグルなるな
2020/07/02(木) 23:00:33.69ID:A8gH83ew
ここの奴らってJavaから入った口か?
いきなりコトリンマンって案外少ないよな
2020/07/03(金) 00:00:17.92ID:vP0l+9Os
いきコトだからjavaも同時進行で学んでる
javaは見て何してるか分かればいいって考えでとりあえずkotlin化してる
ちなみに変換は使わない、無駄にnullまみれになるから
2020/07/03(金) 00:06:46.00ID:vP0l+9Os
OpenGLはRendererに値送りたいんだけど継承がGLSurface View.RendererでViewじゃないからcontextが渡せない
だからセンサーの値が届かない
2020/07/03(金) 05:46:43.96ID:p8ISefzH
>>107
どっちもインターフェースかな?
KotlinじゃないJavaですが
//GLアクティビティクラス作って
public class MyGLactivity extends Activity implements GLSurfaceView.Renderer{}

//センサー付きリスナーからメインを更新させて
public class MyAccelListener implements SensorEventListener{
public MyAccelListener(MainView view){MainView=view;}
public void onSensorChanged (SensorEvent event){mainView.invalidate();}
}

//メイン
public class MainView extends View
{
MyGLactivity activity;
//コンストラクタ
public MainView (Context context)
{
activity = (MyGLactivity)context;//キャストしたらダメかな?
}
protected void onDraw(Canvas canvas)
{

MyAccelListener listener = activity.getMyAccelListener();

}
2020/07/03(金) 06:28:34.63ID:vP0l+9Os
>>108
ありがと
頑張ってkotlin化してみます
2020/07/03(金) 09:25:49.82ID:uNjU4ACR
gpsの後進タイミングって何秒くらいが推奨なんですかね
2020/07/03(金) 15:19:52.63ID:/+uSoVK/
>>110
60fpsには対応してるだろうから
1000÷60= 16.66666666666667ミリ秒
2020/07/03(金) 20:18:19.54ID:nJYArvJj
そんな早くてバッテリー消費問題ないんでしょうか
2020/07/03(金) 20:28:37.63ID:0RfpkPOi
実測したらいいんじゃないんですかね
2020/07/03(金) 20:31:45.18ID:nJYArvJj
わからないならレスしないでくださいうざいだけです
2020/07/03(金) 23:20:29.35ID:8QUz9sdR
>>112
バッテリーの消費は実験してみないとわからないんじゃないかな?
滑らかさとのトレードオフだと思うけど
映画並みの24コマまで落としても良いんじゃない?または倍の48とか
電子ペーパーでもない限り気にしなくて良いんじゃないですか?
一昔前は30fpsが普通だったし、
ゲームなら120とか144とかあるし、なんとも
最近の1000fpsプロジェクター並みでなくても良いでしょう?
2020/07/03(金) 23:55:37.18ID:zEGBQA4b
16.67ミリ秒はジョークかと思って見てたがマジだったんか

小文字と”後進”で何か他の用語だと思ってるみたいだけど
Global Positioning SytemのGPSのことだと思うぞ
2020/07/04(土) 00:08:10.73ID:6k6IaQvA
どうもおかしいと思ったらそうかGPSロガーね
んじゃ1Hzから10Hzの製品があるからそれで
2020/07/04(土) 00:54:52.30ID:+bmFKfmX
役に立たないクズばかり
2020/07/04(土) 01:32:25.11ID:D+qkQPx7
Kotlin関係ないしな
2020/07/04(土) 05:26:38.71ID:b24EOlvX
地図の縮尺や想定する端末の移動速度にもよるからな
2020/07/04(土) 12:12:20.99ID:LEDuzYUZ
自分で調べることもできない時点で向いてないよキミ
挙句5ちゃんで質問して逆ギレとかアホすぎかと
2020/07/04(土) 12:13:46.08ID:xxQcNpXl
言語とAPIと開発環境はそれぞれ別物だよね。
初心者には区別がつきにくいだろうけど、混乱を助長するような書籍は害悪。
2020/07/06(月) 00:17:47.24ID:ADv1sI7y
この本は俺に理解できないから混乱を助長している
124あはーん
垢版 |
2020/07/07(火) 18:21:40.25ID:v+6s5ql8
あはーん
125デフォルトの名無しさん
垢版 |
2020/07/07(火) 18:33:18.94ID:e1WbjzO/
この本って?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況