X



Kotlin [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0611デフォルトの名無しさん
垢版 |
2017/09/15(金) 11:20:35.63ID:t0O3AeYk
>>604
言語自体のデメリットではないかもしれないが、
IDEの選択肢がない・開発補助ツールなどが未発達。
0612デフォルトの名無しさん
垢版 |
2017/09/15(金) 18:58:50.23ID:Tu1mqslW
>>610
コレはでかい。正直この知識を簡単に獲得する方法あるの?
kotlinからjavaの世界に入る方法を知りたい。
0613デフォルトの名無しさん
垢版 |
2017/09/15(金) 21:05:06.50ID:iYxiAtrq
そういやJavaの知識なしの人向けの入門書はまだないのかな?
なくても流行ればその内出そうだが。
0615デフォルトの名無しさん
垢版 |
2017/09/16(土) 07:58:31.08ID:AcW1bn43
Javaって一番メジャー言語だから
情報が溢れてると思うんだが……
マイナー言語の苦しさに比べたらはるかに楽
0616デフォルトの名無しさん
垢版 |
2017/09/16(土) 08:06:32.31ID:wHRqrpim
Javaを既に知っている者ならそうだろうな
Javaを知らずにKotlinやると、KotlinとJavaを並行して学習することになるから面倒だって話だ
0617デフォルトの名無しさん
垢版 |
2017/09/16(土) 09:13:19.33ID:dqmaxFWN
kotlinはJavaのスクリプト言語みたいな立ち位置だからな(コンパイル要るけど)
Java入門が巷に溢れているがゆえにKotlin+Javaの書籍は出しにくいかもしれん
それにしたとしても時間が解決していくではあろう
0618デフォルトの名無しさん
垢版 |
2017/09/16(土) 09:53:29.49ID:64cU0LXO
Kotlinで開発してたとして、具体的にどういうときにJavaの知識が必要になるんだろう?
JVMに関してなら「言語+実行環境」だから他の言語と変わりないし
Javadocのシグネチャくらいで困ることは無さそうだし

多分、解説書く側も「何が分からないのか分からない」状態になってるんじゃないかな
0619デフォルトの名無しさん
垢版 |
2017/09/16(土) 10:25:55.20ID:7CqADWEJ
>>607
JSもJVMもランタイムがいると思うけど、このランタイムってApache2.0ライセンスなのかな?
だとしたら、同梱した場合、表示が必要になるんだっけ?
0620デフォルトの名無しさん
垢版 |
2017/09/16(土) 10:55:31.44ID:9wmYZqGr
>>618
こういうことをJVM上でやりたいなぁって思った時に、Javaでの実装手法を調べてKotlinで読み換えるわけだろ?
その時にまずJavaの全般的な知識(文法, ライブラリ)を浅く広く手に入れる所から始まる
次に、JavaからKotlinに読み換えるために文法/ライブラリの在り様を深く理解してから適切なKotlinコードに書き下す
JavaとKotlinの生半可な知識だけでJavaコードを参考にKotlinコード書くと、汚いKotlinコードになるよね

なので、絶賛Javaを再勉強中・・・Java1.5の頃の知識で止まってるからイマドキのJavaが分からない
java.langとかNIO2とかを使ったコードをKotlinでいきなり書こうとしたら何か違う感が酷くてやめちまったよ
0621デフォルトの名無しさん
垢版 |
2017/09/16(土) 11:21:42.95ID:QlT8cqjN
他の言語を知ってれば要はリファレンスとjava特有の注意事項があればいいと思うの。
文字列組み立てにはStringBuilder使えみたいなの。

そういうの無い?
0622デフォルトの名無しさん
垢版 |
2017/09/16(土) 11:42:24.85ID:zsfdrVgC
android studioってkotlinのプロジェクトにjavaのコードを貼り付けたらkotlinに変換してくれる神機能があるから
泥開発する時にネットで拾ったjavaのコードをペタペタコピペプログラミングするだけでも勉強になる

javaもkotlinも知識皆無の状態でkotlinで泥アプリ開発に取り組んだら見様見真似で簡単なアプリ作れた
ある程度コピペしてたらjavaのこの書き方はkotlinではこう書きそうっていうのがなんとなく察せてくるからandroid studioの補完を頼りに写経したりする

javaも知らないけど新しく言語の知識学ぶなんて面倒くさいからヤダ!知識皆無だけどすぐ何か作りたい!hello wordとか練習問題みたいなの書いても面白くないからモチベーションわかない!すぐ作りたい物作りたい!って場合は
ネットのサンプルと強力なIDEの支援を頼りにコピペ写経するのが効率よさそう
(外国語ができなくても海外でしばらく生活したら知識的に習わなくてもだんだん喋れるようになる理論)
0623デフォルトの名無しさん
垢版 |
2017/09/16(土) 12:49:19.86ID:64cU0LXO
>>620
Kotlinで書かれたサンプルコードが少ないってこと?
それについては自動変換で対応するか、Kotlinが広まってサンプルが増えるのを待つしか無いか
0624デフォルトの名無しさん
垢版 |
2017/09/16(土) 12:50:15.30ID:64cU0LXO
それと思ったのはKotlin・・というよりプログラム初学者は
言語仕様、ライブラリ、プラットフォームの知識がごちゃ混ぜになってるのかも

「Java言語仕様の知識前提」の場合はデメリットだけど、後者2つはそうではないんだよね
ちゃんと切り分けて教える必要があるのかもしれない
0625デフォルトの名無しさん
垢版 |
2017/09/16(土) 15:17:58.69ID:iyhV3x2n
>>620
一々Javaで考えてからKotlinに読み替えるのではなく最初からKotlinで考えればいいのでは?それは出来ないの?
0626デフォルトの名無しさん
垢版 |
2017/09/16(土) 15:51:26.67ID:zchkTGlK
前途洋々たる人にJavaを教えたいかというとそうでもない、しかし現状kotlinにはjavaの知識がいくらか必要というジレンマ
0628デフォルトの名無しさん
垢版 |
2017/09/17(日) 09:11:08.18ID:e3nYUfGU
kotlin変換はスニペット単位で変換挿入できれば初学者サポートとして文句ないんだけど
まあ高望みしても仕方ないなw
0629デフォルトの名無しさん
垢版 |
2017/09/17(日) 09:16:06.15ID:s1Tpc6AU
Kotlinを使い始めるのにJavaから始めないといけないのも高望みだから仕方ない
JVMとJava LibraryありきなんだからJavaを知らないで何が始まろうかと理解している
0630デフォルトの名無しさん
垢版 |
2017/09/17(日) 10:57:51.48ID:iGeioDqi
>>628
騙されたと思ってandroid studioでkotlinを開いてそこにjavaのスニペットをそのまま普通に貼り付けてみ
0632デフォルトの名無しさん
垢版 |
2017/09/17(日) 20:10:21.20ID:881Zhju6
kotlinというかIntelliJはなにかにつけてUnresolved Referenceで発狂して真っ赤になるのを潰していかんといかん
全部自前のkotlinファイルとパッケージだけで構成すれば絶対に起こらん事象だが、そんなのは稀だ
0633デフォルトの名無しさん
垢版 |
2017/09/17(日) 20:33:40.63ID:8Aq7R6E2
>>632
あれはライブラリ作者とプラグイン作者が7割くらい悪い
提供されるテンプレートでjavaパッケージのimportの不足(しかもbuild.gradleに依存関係未記述)とか勘弁して欲しい
ていうかこれ作者のとこではどうやって動いてたんだ…
0635デフォルトの名無しさん
垢版 |
2017/09/18(月) 21:46:47.81ID:KEjrNeQk
昔のEclipse環境下開発みたいなトラブル起こしてんなw
libs/*.jar と .classpath をコミットしてなくて、ライブラリ実装者とライブラリ利用者で環境が合致しないとかよくあった

build.gradleで依存管理してないなら、libs/*.jar と .idea/ で管理してるんじゃないのかね
ビルドできねーよってIssue発行して、build.gradleで依存管理するように直してもらおうぜ(Kotlinと全く関係ない話題
0636デフォルトの名無しさん
垢版 |
2017/09/19(火) 01:56:04.30ID:q5GM4Sdx
TornadoFXは面白そうだなと思って手を付けた瞬間
・TornadoFXのDSL記法では思った通りに動作しないがJavaFXでは動く
・JavaFXではうまく動かないがswt直呼びでは動く
・JavaのGUIアプリケーションではあまり得意ではない
の3者が混然一体となってGUI初心者に襲いかかってきた荒野の印象しかない
GUIやるのさぼってきたツケもあるしkotlin関係ないけどな
0637デフォルトの名無しさん
垢版 |
2017/09/19(火) 02:57:40.00ID:33S+M35U
FXには手を出すなって死んだばっちゃが言ってた
0638デフォルトの名無しさん
垢版 |
2017/09/19(火) 03:13:01.72ID:NsD/KMp/
HTTPプロトコル受けるようにして、GUIはHTMLとjavascriptでブラウザ任せでやる方がいいんでね?
0639デフォルトの名無しさん
垢版 |
2017/09/19(火) 11:33:34.11ID:yNuGs4H1
とるねーどFXのDSL記法は初心者の「こうかな?これなら動くかな?」という学習の試行錯誤を念入りに潰してバグに変えるプロ
設定記述手法以外のDSLなんてまあたいていそんなもんだが
どうしてもPCでGUI欲しくてなにもわからない最初ならJavaFXにするのがよいよ
0640デフォルトの名無しさん
垢版 |
2017/09/19(火) 23:03:32.67ID:yNuGs4H1
>>630
IntelliJではできんことのほうが多いね
完動するJavaのクラスのファイルとかそういうでっかいのか意味のあるわかりやすい小さいやつとかじゃないとまず無理
それでも便利だろうという指摘はもっともだが
0641デフォルトの名無しさん
垢版 |
2017/09/20(水) 00:55:44.49ID:yi4mI7ko
tornadoFXで丸1日悩んでいたことがJavaFXでは1時間でできたなんていう笑い話が…
別にこれに限った話じゃないけど、今から何か始めたいって人は「kotlin対応新鋭フレームワーク!」みたいな宣伝には騙されずにJava製のでいいからメジャーなやつを選ぼうね
たいていkotlinでの書き方みたいなのが公開されてるからそれで充分さ
0643デフォルトの名無しさん
垢版 |
2017/09/21(木) 00:08:50.00ID:fijEecfV
そこそこの長さの文字列をわかりよく文字列のリストにする方法ってないですか
"ABCDE".toList()だとCharのリストになってmapとか繋げて変換がいります
"ABCDE".split("")だとなんか7つのリストになります
文字境界の正規表現を指定すればいいような気もしますが探せませんでした
0644デフォルトの名無しさん
垢版 |
2017/09/21(木) 03:27:44.93ID:AcIIQNEl
>>643
"ABCDE".split("(?=.)") ではどうか?
0645デフォルトの名無しさん
垢版 |
2017/09/21(木) 11:28:55.55ID:fijEecfV
>>> "ABCDE".split("")
[, A, B, C, D, E, ]
>>> "ABCDE".split("").size
7
>>> "ABCDE".split(Regex("(?=.)"))
[A, B, C, D, E]
おお、ありがとうです
しかしありそうでないのねStringで分けるやつ 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0647デフォルトの名無しさん
垢版 |
2017/09/21(木) 21:11:04.25ID:fijEecfV
だからそれだとStringをCharにしてからStringにするという手間がかかっ

for(int var6 = 0; var6 < var5.length(); ++var6) {
char item$iv$iv = var5.charAt(var6);
String var13 = String.valueOf(item$iv$iv);
destination$iv$iv.add(var13);
}

…ってなかった。最近の言語のコレクションのmapとかあのへんのメソッドは空気を読んでて困る(えらい)。じゃあこれにします
0648デフォルトの名無しさん
垢版 |
2017/09/23(土) 03:05:43.18ID:LuIx8rlF
Kotlinは配列というかリストになんか入れるとエラーで二度と引き出せなくなるのが嫌
何か不都合があって引き出せないのなら最初から弾いてくれ
0652デフォルトの名無しさん
垢版 |
2017/09/23(土) 10:14:30.20ID:Fr4ObNsJ
あのへんは型とか継承とかの理解きちんとしてないとちょっと複雑なの入れたときものっそいエラーになるよ
適当に書いて適当に使ってると動くと見せかけていざというとき詰まる箇所ベスト3に入ると思う
0654デフォルトの名無しさん
垢版 |
2017/09/23(土) 13:45:04.86ID:HgJ0Nznd
コレクションって色々種類があって、
問題によって適切なクラスを選ぶべきとか言っていたくせに
mutableListはmutableListしか種類ないし、それで別に問題がないってどういうことだよ
フィールドもprivateにしてsetter, getterからアクセスしろとか言っていたくせに
プロパティアクセスは実質フィールドをpublicにしているのと変わりないじゃねえか
その他、継承は良いことだからたくさん使って活用していこうとか言っていたくせに
openをつけないと継承できなくして、実質継承は推奨しないみたいになってるのなんなん
嘘ばっかり言いやがって
0655デフォルトの名無しさん
垢版 |
2017/09/23(土) 14:17:09.35ID:8bsZ0VcP
>>652
「のっそい」って何処の方言?沢山って意味?
0657デフォルトの名無しさん
垢版 |
2017/09/23(土) 15:29:22.72ID:vuIl3Vgh
プロパティアクセスは、publicなフィールドへのアクセスと違って、
setを制限してgetだけにできるし、
setするときの値チェックなんかもできるし、
privateフィールドをsetter/getterでアクセスする利点はそのままに、
使うときの表記をシンプルにしてくれる
0658デフォルトの名無しさん
垢版 |
2017/09/23(土) 15:29:38.76ID:vuIl3Vgh
継承するよりコンポジションしてアクセスを転送する方がいいっていうのは
もうオブジェクト指向では定説
0659デフォルトの名無しさん
垢版 |
2017/09/23(土) 15:37:14.57ID:vuIl3Vgh
ミュータブルなコレクションに厳密な静的型チェックを適用としようとするのはいろいろ限界がある
Javaでは厳密な静的型チェックを放棄して使いやすさを優先してる
0660デフォルトの名無しさん
垢版 |
2017/09/23(土) 15:40:52.48ID:JwqPmi7Z
今更だけど、StringをStringリスト(配列)にするってクッソ馬鹿っぽいな
Stringをnewするのも重いし、確保したメモリをGCで回収するのも重くなる

「StringをCharにしてからStringにするという手間」とか言うならChar配列で扱えというね
String配列扱うくらいに性能を考えないなら、当初の通りに#toList #map使っててもおkだろ
0661デフォルトの名無しさん
垢版 |
2017/09/23(土) 16:00:34.34ID:BNc4tUhk
>>654
>mutableListはmutableListしか種類ない
意味がわからない
大枠でList, Set, MapなどがあってLinkedHashMapとSortedMapは順序制御が違うし
ArrayListとLinkedListは追加削除のパターンによって計算量オーダーが異なる

>setter, getterからアクセスしろとか言っていたくせに
構文が理由ではない
>フィールドをpublicにしているのと変わりない
構文が変わりないだけ
0662デフォルトの名無しさん
垢版 |
2017/09/23(土) 16:22:03.12ID:vuIl3Vgh
>>660
Stringがイミュータブルなら、
Stringの一部分を取り出して新しいStringを作るのはとても軽い処理でできる
その新しStringを作る仕組みで配列を作れば、それも軽い
0663デフォルトの名無しさん
垢版 |
2017/09/23(土) 16:43:59.09ID:JwqPmi7Z
COW信者乙

さておき、入れ物のStringインスタンスをnewするのはやめたいよな
中身をコピーするかどうか以前にJVM上のインスタンスの確保が重たいんだよ
そして、GCで回収して回る対象個数が増えて重たくなるのは中身のコピー有無は関係ないんだよ
0664デフォルトの名無しさん
垢版 |
2017/09/23(土) 17:42:00.77ID:8bsZ0VcP
かといって日頃パフォーマンスに影響するような膨大な処理をさせてないので気にならない
0666デフォルトの名無しさん
垢版 |
2017/09/23(土) 21:43:26.21ID:Kp7vI9MI
気に入らないところが、JavaやScalaを使い込んだ人視点で、このスレレベルからみるとむしろズレてるね
0667デフォルトの名無しさん
垢版 |
2017/09/23(土) 22:33:09.90ID:lJM5VEju
>>662
そういったイミュータブルな文字列を表現するデータ構造として Rope がある
・Rope (data structure) - Wikipedia
 https://en.wikipedia.org/wiki/Rope_(data_structure)
・ロープ: 理論と実践 - IBM developerWorks / Java technology
 https://www.ibm.com/developerworks/jp/java/library/j-ropes/
・最終報告 - Ropeを用いたRuby処理系の高速化に関する報告
 http://www.spinute.org/ruby/gsoc2016/japanese.html

特に「Stringの一部分を取り出して新しいStringを作る」という
substring 操作に関しては、上記の Wikipedia のページからリンクされている
原論文(英語)の中で疑似コードを使って丁寧に解説されている

で、肝心の Kotlin 実装は知らない(汗
0668デフォルトの名無しさん
垢版 |
2017/09/23(土) 22:39:08.56ID:XK13+/v0
>>641
tornadoFXのマニュアル今読んでいるところだけど、tornadoFXだめなのか...
>>642
前やってみたけど、Javascriptとつなぎ合わせるところが、ちょっと面倒だった。
型安全でもないし...
0669デフォルトの名無しさん
垢版 |
2017/09/24(日) 02:01:15.02ID:GOJB25/b
>>666
文法が気に入らないって言ってるだけでJavaやScalaを使い込んでるようにも見えんがな
JVMの仕様上、JavaやScalaの方が最適化されてるからKotlinが気に入らないって話かと思って読んだらもっと浅い話だった

Kotlinの文法が良いってこのスレは賞賛してるから論点はこのスレと合致してる
ただ、Kotlinの文法がダメって記事と、Kotlinの文法がイイってスレとで感想が真逆なだけだ
0670デフォルトの名無しさん
垢版 |
2017/09/24(日) 02:17:41.07ID:vbDFNvhm
>>655
ものすごい→ものっそい
0671デフォルトの名無しさん
垢版 |
2017/09/24(日) 09:32:49.28ID:UrGEC0gh
tornadoFXはDSLのダメなとこ出てるねえってだけだから、それ気にならないならいいんじゃないかな
足りない情報は君が発信するんだ
0672デフォルトの名無しさん
垢版 |
2017/09/24(日) 10:29:34.48ID:tu0D//Rh
Kotlin は、Groovy, Scala, Ruby の影響を受けている

Ruby を関数型にした、Elixir を意識している。
関数型では、デフォルトが、immutable
0673デフォルトの名無しさん
垢版 |
2017/09/24(日) 14:15:58.51ID:q8xwt5Nv
ねえねえおにいちゃん
ミュータブルリストの先頭から要素を削除して詰める(戻り値不問)って行為をいちばんうまくできる書き方ってなあに
0674デフォルトの名無しさん
垢版 |
2017/09/24(日) 14:31:53.81ID:c233uqnI
>>673
removeAt() じゃないの?
0675デフォルトの名無しさん
垢版 |
2017/09/24(日) 14:32:52.09ID:c233uqnI
コマンドラインでこんな風にできたが

>>> val a = mutableListOf(1, 2, 3)
>>> a
[1, 2, 3]
>>> a.removeAt(0)
1
>>> a
[2, 3]
0677デフォルトの名無しさん
垢版 |
2017/09/26(火) 20:47:43.28ID:fZxiOEU0
fun main(args : Array<String>){
test(){
println("test!")
}
}

fun <T> test(body: () -> T ) : T {
println("START")
try{
return body
}
finally{
println("END")
}
}
これで
(returnの行): error: type mismatch: inferred type is () -> T but T was expected
ってエラー出るのなんでですか
まだどっかに<T>って書かないとダメですか
STARTって表示してtest!って表示してENDって表示するようにしたいんですが
0679デフォルトの名無しさん
垢版 |
2017/09/26(火) 21:19:23.18ID:rflTuAqa
println()って何か返すんだっけ?
0680デフォルトの名無しさん
垢版 |
2017/09/26(火) 21:25:08.76ID:aozsvlNo
コピペ参考でジェネリクス書いちゃう気持ちはわかる
ネットとかにある高階関数なんかのサンプルはたいていなんか小難しいパターンやってるからな
ちょこちょこ検索してみたけどシンプルなのはなかなかないようだ
というわけで顧客が必要だったもの:

fun main(args : Array<String>){
test(){
println("test!")
}
}

fun test(body: () -> Unit){
println("START")
try{
return body()
}
finally{
println("END")
}
}

超わかりやすい
0681デフォルトの名無しさん
垢版 |
2017/09/26(火) 22:18:45.79ID:8E9hjYW6
>>680
それ return 書かなくても同じだよね?
0682デフォルトの名無しさん
垢版 |
2017/09/27(水) 00:00:41.38ID:u5lJ+g1P
簡素化のためにUnitを返す型をクロージャーにしてるけど任意の型を戻せるようにしたいんじゃないの
>>680は顧客が本当に必要だったものとは別のものが出来上がってる事例な気がする
0683デフォルトの名無しさん
垢版 |
2017/09/27(水) 02:23:01.67ID:T8WeFZTh
>>677
return body ではなく return body() では?
0684デフォルトの名無しさん
垢版 |
2017/09/28(木) 00:26:24.46ID:iSh/X78V
前から思ってたんだけど、Kotlinって
val hogeIsEmpty = hogeが空かどうかのわりと長い1行
if (hogeIsEmpty) {
// then
}
みたいな読み下す優先の変数の名前とか分離定義って推奨されてる?
Javaでやらないようなことはやらんほうがいい? 条件カッコに改行ありで詰め込むべき?
0687デフォルトの名無しさん
垢版 |
2017/09/28(木) 01:13:09.11ID:TXb2X2Zy
えーそれ言語関係なくない?
hogeIsEmptyな関数に抽出するのは
リファクタリングの基本だしJavaでもやるだろ
0688デフォルトの名無しさん
垢版 |
2017/09/28(木) 18:33:31.64ID:Qp0jWVYU
むしろJavaだとboolean isHogeEmpty()ってメソッドを作るケースだから
Javaの文法が古臭いと仕切り直したKotlinではメソッドを作らないのが正当なんじゃないの
0689デフォルトの名無しさん
垢版 |
2017/09/28(木) 20:41:39.85ID:DhynOxwg
そうなのか?

うーん。なんだったらgetだけのプロパティ作ってその中でやるという手もあるが。
0690デフォルトの名無しさん
垢版 |
2017/09/28(木) 21:04:34.88ID:wU4E+DpF
>>684
変数での分離で良い

一見で意味付けが分かり辛いものは変数名で説明していい
局所的なものであれば無意味にメソッド化する必要も無い
その条件式が2度出てきたときに再考する
0691デフォルトの名無しさん
垢版 |
2017/09/29(金) 08:30:52.93ID:Zb0/fBQl
あー、rubyは変数いきなり定義だし命名規則もsnake_caseで緩いし変数もメソッドも呼び出し方同じにできるし
真偽には?つけてよいという風潮があるからこういうの得意だね
Java/Kotlinは読み下しさせようとするとわりとデコボコするけどそのかわり静的コンパイルだから実行パフォーマンスへの影響が少ない
(だから「ちょっと動かして見やすく名前つけただけで動作的中身的には一緒だから安心して」という説得に向いてるのはKotlinのほうではある)
Kotlinにはスコープ関数とかletとかitとか(あとはbeがあれば完璧だ)あるのでそのへん駆使してもらうしか
0692デフォルトの名無しさん
垢版 |
2017/09/29(金) 09:00:05.56ID:RLeXl8wr
一般的には説明変数を追加するのに比べると
メソッド抽出のほうが可読性も保守性も高い
デメリットもあるから状況次第で選択すればいい
いずれにしても言語に依存した話ではないよ
0693デフォルトの名無しさん
垢版 |
2017/10/01(日) 12:07:39.75ID:l76lJP+R
言語に関係ない話だと思うんだけどごめん
初心者がゲーム作ってて、たとえばRPGのアイテムみたいなのをクラスで実装したいって考えたとき、
たとえば食べ物アイテムを100個くらい作ろうと思ったら、名前とか重さとか売価とかレシピとかを持ってるクラスが(下手するとktファイルも)それだけで100個あることになるよね
何かアイテムのデータを確かめたいとか書き換えたいとか思ったら100個の中から探さないといけなくなる気がして、とてもしんどいんだけど、なにか便利な管理方法ってあるものなのかしら
0695デフォルトの名無しさん
垢版 |
2017/10/01(日) 13:26:09.11ID:l76lJP+R
でもデータベースはメソッド生えないにゃん…
現状の超でっかいMapオブジェクト
{"yakusou" -> {"name":"薬草", "price":10, "weight":2, "action":["EAT","DROP","HEAL","GRIND"]...}}
の該当アイテム読んでactionで分岐するメソッド構成とあんまし変わらない気がするにゃん…

ビルド時にCSVファイルとかからクラスファイルを生成してもらえばいいのではと思ったけど
書いてるときにアイテムのクラスやメソッドが参照できないとIDEが補完警告出すことに気づいてぐにょーんってなってる
たぶんゲーム特有のなんとかかんとかなんだろうと思うのでなんとかする
0697デフォルトの名無しさん
垢版 |
2017/10/01(日) 13:45:30.71ID:kJ8csjIE
>>695
アイテムごとに個別のメソッドが必要だと考えるのは抽象化が不足してるから
食べ物アイテム100個作っても食べ物クラス1個で済む場合もあるでしょ
0698デフォルトの名無しさん
垢版 |
2017/10/01(日) 15:01:31.15ID:OWvF7Xmk
むしろそれぞれクラス化するのはアクションの方で
アイテムなんて1クラスで十分じゃね
0700デフォルトの名無しさん
垢版 |
2017/10/01(日) 15:06:13.80ID:4trAwtIa
>>695
> {"yakusou" -> {"name":"薬草", "price":10, "weight":2, "action":["EAT","DROP","HEAL","GRIND"]...}}
> の該当アイテム読んでactionで分岐するメソッド構成とあんまし変わらない気がするにゃん…

それの何がいけないの?
0701デフォルトの名無しさん
垢版 |
2017/10/01(日) 15:11:03.14ID:wO0rh9jl
色々用途や効果がある個々のアイテムインスタンスが対応するメソッドを持ってて自分に関することは全て知っていて
たとえば砕いたら何になるのかとか、字面に置いたらどのテクスチャになるのかとか、を問い合わせる構造にしたいのはわかる気がする
でもそれ理想っぽいけどお察しの通りデータ増えると破綻するんすよ…
0702デフォルトの名無しさん
垢版 |
2017/10/01(日) 15:24:19.98ID:z+KkZaZ7
よくわかんないけどデータベース(SQL)から(id,)name,price,weight,actionの(データ)クラスに入れてMapに突っ込むのは普通じゃね
アクションは共通の動作だけハンドラーに直接書いて、固有の動作は個々のアイテムごとにスクリプトファイル作ってそんなかにアクションごとのメソッド書いて、それをハンドラーから実行させる
0703デフォルトの名無しさん
垢版 |
2017/10/01(日) 15:27:41.13ID:z+KkZaZ7

完全にサーバー<=>クライアント型のゲームを想定してました忘れてください
0704デフォルトの名無しさん
垢版 |
2017/10/01(日) 15:35:03.09ID:YDbLDpC/
よっぽどドラクエ2みたいなツクールサンプル的な単一用途アイテムでもない限り
「薬草という多用途アイテムを表現するのに薬草クラスのインスタンスを作って保持する」というのは悪手
このへんは個別に考えてもらわなければならないのでまあ結論としては>>699
個々人が下手に作って再発明して失敗して適応適用していかなきゃならんなんてなんて非効率なんだとは思うのだが今のところ光明はない
ぶっちゃけ初心者にゲーム作らせるのこのへんの問題もあってあんま好きではないのだ。ユーティリティアプリが無難
0705デフォルトの名無しさん
垢版 |
2017/10/01(日) 16:36:39.58ID:IPLbJXkb
薬草を使った時の処理
薬草を燃やした時の処理
薬草を売った時の処理


薬草クラスにまとめようがまとめまいが
いずれはどこかに書かなければならない
だったら最初から薬草クラスに入れとけって話
0707デフォルトの名無しさん
垢版 |
2017/10/01(日) 23:16:31.50ID:aVSvWtqd
アルゴリズムと計算量を知らないのか

千個の中から、1つを見つける際、全(線形)探索なら千回、
2分探索なら、2^10 = 1,024 だから、10回で見つけられる

2分探索なら、データ数が千個でも、探索回数は、1/100 になる

2千個になっても、全(線形)探索なら2千回、
2分探索なら、11回で見つけられる。
探索回数は、1/200 になる

データ数が倍になっても、探索回数は1回しか増えないが、
データを2分木で持っていないと、2分探索はできない
■ このスレッドは過去ログ倉庫に格納されています

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