JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう
※前スレ
Kotlin 5
https://mevius.5ch.net/test/read.cgi/tech/1544268581/
探検
Kotlin 6
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2019/06/22(土) 15:59:57.23ID:zj+KJbMh712デフォルトの名無しさん
2020/03/14(土) 08:26:54.32ID:AOabs0cu Kotlinって単純にJavaの上位互換と考えていいんですかね?
それとも特定の用途ならJavaの方が優れてることもある?
それとも特定の用途ならJavaの方が優れてることもある?
713デフォルトの名無しさん
2020/03/14(土) 08:50:35.96ID:uPAEOS5i714デフォルトの名無しさん
2020/03/14(土) 11:17:54.82ID:cJqY8aA1 >>711
俺は特別!
俺は特別!
715デフォルトの名無しさん
2020/03/14(土) 15:02:17.48ID:SYJjC+91 特別な俺に酔いしれる、アートなプログラミングをするスレ民にふさわしいな
716デフォルトの名無しさん
2020/03/15(日) 01:00:14.34ID:UPbVmx1a 異端だな。
Androidアプリ作ってる場合はまあ普通だが。
Androidアプリ作ってる場合はまあ普通だが。
717デフォルトの名無しさん
2020/03/15(日) 13:40:42.45ID:JeE8EKc6 アンドロイドアプリ作る案件でしか触ったことないけどアンドロイドアプリ以外でもこの言語使うことってどれくらいあるんだ?
フリーでいろんな会社のいろんな案件に携わってきたけどアンドロイドアプリ以外でこの言語選択してるシステムに出会ったことがない
フリーでいろんな会社のいろんな案件に携わってきたけどアンドロイドアプリ以外でこの言語選択してるシステムに出会ったことがない
718デフォルトの名無しさん
2020/03/15(日) 13:43:15.79ID:G4jfON4Y SwiftもRustもそんな感じ
719デフォルトの名無しさん
2020/03/15(日) 14:28:52.20ID:JeE8EKc6 アプリ制作専用言語という認識で差し支えないってことね
720デフォルトの名無しさん
2020/03/15(日) 14:45:30.20ID:3NnqBxtE 2年前くらいの頃はサーバーサイドJavaも食いそうな勢いだったんだけど、見る影もないね
もうAndroidアプリ制作専用言語以上は何も期待できない
もうAndroidアプリ制作専用言語以上は何も期待できない
721デフォルトの名無しさん
2020/03/15(日) 14:57:29.36ID:+eqDq3h/ 何度も言われてるがベターJavaで、近代Java案件の置き換えが可能なのだが、
新規Java案件が今はもうAndroid非ゲームアプリくらいしかないため、結局Android非ゲームアプリくらいしか用途がない
もちろんかつてのJavaのように何を作っても構わないしなんでもだいたい作れるが、そもそもわざわざJavaで作る理由がもうないので…
新規Java案件が今はもうAndroid非ゲームアプリくらいしかないため、結局Android非ゲームアプリくらいしか用途がない
もちろんかつてのJavaのように何を作っても構わないしなんでもだいたい作れるが、そもそもわざわざJavaで作る理由がもうないので…
722デフォルトの名無しさん
2020/03/15(日) 15:54:52.18ID:uLtpsypH う、うん…
723デフォルトの名無しさん
2020/03/15(日) 19:04:24.46ID:U0exLU+5 javaの上位互換だからjava出来るならKotlinも直ぐ出来るって勘違いしてる人結構いるけど、
細かいところで書き方とか違うからそれなりに慣れるまで時間かかるよね
細かいところで書き方とか違うからそれなりに慣れるまで時間かかるよね
724デフォルトの名無しさん
2020/03/15(日) 19:05:45.28ID:8Tu8byB5 まぁ何でもそうじゃね
725デフォルトの名無しさん
2020/03/15(日) 19:14:18.96ID:AJhRJqKO ( ´゚д゚`)
726デフォルトの名無しさん
2020/03/15(日) 19:24:15.07ID:W4rB3Afy Javaはお固い分野でも新規に使われてるのに
縁がない人は頓珍漢な分析するよね
縁がない人は頓珍漢な分析するよね
727デフォルトの名無しさん
2020/03/15(日) 19:57:21.56ID:sgfXfD7p Java<kotlinだけどそもそも新規でのJava需要が下がってきてるから流行らないって事か?
728デフォルトの名無しさん
2020/03/15(日) 20:02:19.40ID:g43aymu7729デフォルトの名無しさん
2020/03/15(日) 21:07:47.62ID:Sa9u1DCG730デフォルトの名無しさん
2020/03/16(月) 00:53:01.45ID:hDAZpInh731デフォルトの名無しさん
2020/03/17(火) 01:35:07.82ID:Aeuh89FK かつてJavaは凄く人気が有った言語だから、エコシステムが物凄く大きい。
一方、KotlinはAndroid開発で使う人は使うと言う位置づけなのでは。
一方、KotlinはAndroid開発で使う人は使うと言う位置づけなのでは。
732デフォルトの名無しさん
2020/03/17(火) 07:47:03.83ID:sU5dKoAT エンタープライズでJavaを採用するような案件や環境は安定と安心が最優先すぎるのが逆風だと思う
Kotlinで生産性が上がると言われても移行の総コスト、安いコーダーが安定供給できるか
この先立ち消えたりJBがやらかしたりでKotlinコードが不良資産化しないかなど不安が大きい
おじさんを説得するには実績が欲しいがまだキャズムを越えない
越えて欲しいなあ
Kotlinで生産性が上がると言われても移行の総コスト、安いコーダーが安定供給できるか
この先立ち消えたりJBがやらかしたりでKotlinコードが不良資産化しないかなど不安が大きい
おじさんを説得するには実績が欲しいがまだキャズムを越えない
越えて欲しいなあ
733デフォルトの名無しさん
2020/03/17(火) 10:22:24.77ID:aozOj1qc エンタープライズではテストと比べればコーディングの手間は無視できるし、
一発作り切ったら運用に移管して手を切るのが基本だからコードが冗長で見通しが悪いとかはあまり問題にならない
どう考えてもマイナー言語ロックインのリスクをペイしないよ
一発作り切ったら運用に移管して手を切るのが基本だからコードが冗長で見通しが悪いとかはあまり問題にならない
どう考えてもマイナー言語ロックインのリスクをペイしないよ
734デフォルトの名無しさん
2020/03/17(火) 14:06:05.53ID:Aeuh89FK KotlinはJavaとは宣言の書き方が前後逆になっただけの様な言語のイメージ。
それ以外でも何かは良くなっているかもしれないが、何かは悪くなっているだろうと予想され、敢えてJavaの代わりに使おうとは思えない。
KotlinはAndroidでは使えても、デスクトップでは難しいだろうが、
Javaなら、Swingを使えば、Win/Mac/Linuxで共通アプリが作れる。
昔はさらにここにブラウザ内のアプレットも加わっていたが、今はそれが動かなくなった。
ところが、アプレットをWasmとして復活させる動きも出ているようだから、プラットフォームは広い。
恐らくそのうちSwingもAndroidやiOSで動くようになるのではないか。
それ以外でも何かは良くなっているかもしれないが、何かは悪くなっているだろうと予想され、敢えてJavaの代わりに使おうとは思えない。
KotlinはAndroidでは使えても、デスクトップでは難しいだろうが、
Javaなら、Swingを使えば、Win/Mac/Linuxで共通アプリが作れる。
昔はさらにここにブラウザ内のアプレットも加わっていたが、今はそれが動かなくなった。
ところが、アプレットをWasmとして復活させる動きも出ているようだから、プラットフォームは広い。
恐らくそのうちSwingもAndroidやiOSで動くようになるのではないか。
735デフォルトの名無しさん
2020/03/17(火) 14:21:17.83ID:yigrTQzb なんで思い込みのイメージだけで語るの
736デフォルトの名無しさん
2020/03/17(火) 14:26:37.12ID:Aeuh89FK >>733
短い簡単なプログラムなら、習いたての新しい言語でも作れるが、長くて複雑なプログラムには、十分に時間をかけて習熟した言語でないと作るのは難しい。
次々に生まれる新しい言語をニワカに学んでもいいプログラムを作るのは難しいのだ。
新しい言語では逆に間違ってしまったり、やりたいことを実現する方法が分からなくてそれを調べるために効率が下がることが多い。
Javaの言語仕様は、人気が有ったことからも分かるように昔から既に優れており、それはそれで一つの完成系をなしている。
根本的に新しい言語は一部だけは優れていても、どこかではむしろ劣っていることが多い。
一方でJavaはJavaで進化し続けている。
短い簡単なプログラムなら、習いたての新しい言語でも作れるが、長くて複雑なプログラムには、十分に時間をかけて習熟した言語でないと作るのは難しい。
次々に生まれる新しい言語をニワカに学んでもいいプログラムを作るのは難しいのだ。
新しい言語では逆に間違ってしまったり、やりたいことを実現する方法が分からなくてそれを調べるために効率が下がることが多い。
Javaの言語仕様は、人気が有ったことからも分かるように昔から既に優れており、それはそれで一つの完成系をなしている。
根本的に新しい言語は一部だけは優れていても、どこかではむしろ劣っていることが多い。
一方でJavaはJavaで進化し続けている。
737デフォルトの名無しさん
2020/03/17(火) 15:01:46.47ID:IQmvYlpF だからなに?
738デフォルトの名無しさん
2020/03/17(火) 15:04:23.46ID:+OGH67Oj だから勉強したくないでござる
739デフォルトの名無しさん
2020/03/17(火) 15:07:56.32ID:IQmvYlpF そういうことなんだろな。
JAVAだけやっとけば安心なんだ!って自分に言い聞かせてるようにしか見えん
JAVAだけやっとけば安心なんだ!って自分に言い聞かせてるようにしか見えん
740デフォルトの名無しさん
2020/03/17(火) 15:52:42.79ID:Aeuh89FK 言語ばかり学んでいてもな。
741デフォルトの名無しさん
2020/03/17(火) 15:56:41.70ID:aozOj1qc >>739
そういう観点でいえば、学ぶべきはKotlinじゃなくてGoやC#などの非JVM系言語だろう
Kotlinを選んでいる時点で、自分もまたコンフォートゾーンに留まろうとしている平凡な人間の一員であることを自覚したほうがいいぞ
そういう観点でいえば、学ぶべきはKotlinじゃなくてGoやC#などの非JVM系言語だろう
Kotlinを選んでいる時点で、自分もまたコンフォートゾーンに留まろうとしている平凡な人間の一員であることを自覚したほうがいいぞ
742デフォルトの名無しさん
2020/03/17(火) 16:00:09.84ID:Aeuh89FK どんなに優秀な人でも、あらゆる言語やツールキットを学ぶほどの時間は無いから、学ぶべきものを取捨選択や優先順位付けが重要。
一つの言語だけを学んで、プログラムに必要ななんらかの(専門的な)知識を学ぶのも立派な選択だ。
一つの言語だけを学んで、プログラムに必要ななんらかの(専門的な)知識を学ぶのも立派な選択だ。
743デフォルトの名無しさん
2020/03/17(火) 16:05:41.43ID:yigrTQzb 令和のstaticおじさん(この方はJavaおじさん)かな
744デフォルトの名無しさん
2020/03/17(火) 16:29:11.06ID:XIub247n ねぇねぇScalaって息してる?Kotlinとどっちがすごい?
745デフォルトの名無しさん
2020/03/17(火) 16:45:02.15ID:yigrTQzb 息はしているがどっちが凄いかは知らん
ScalaのコードをJavaScriptのコードに変換する「Scala.js 1.0」リリース
https://thinkit.co.jp/news/bn/17374
ScalaのコードをJavaScriptのコードに変換する「Scala.js 1.0」リリース
https://thinkit.co.jp/news/bn/17374
746デフォルトの名無しさん
2020/03/17(火) 16:46:06.62ID:Aeuh89FK747デフォルトの名無しさん
2020/03/17(火) 16:49:51.14ID:Aeuh89FK >>746
というか、新しい言語を学んで無い人を馬鹿にするのは良くない。
自然法則は昔からずっと変化しないから学んで損は無いが、言語は人工的なため、不変性も無く学ぶ価値の無いものも多数含まれる。
その取捨選択が重要。
というか、新しい言語を学んで無い人を馬鹿にするのは良くない。
自然法則は昔からずっと変化しないから学んで損は無いが、言語は人工的なため、不変性も無く学ぶ価値の無いものも多数含まれる。
その取捨選択が重要。
748デフォルトの名無しさん
2020/03/17(火) 17:07:25.05ID:IQmvYlpF 少なくとも多言語のスレでJAVAだけでいいんだ!って力説されてもね
749デフォルトの名無しさん
2020/03/17(火) 17:07:39.27ID:IQmvYlpF 他言語
750デフォルトの名無しさん
2020/03/17(火) 17:09:29.69ID:Aeuh89FK Kotlinが蔓延することで困る人もいるんだから。
751デフォルトの名無しさん
2020/03/17(火) 17:13:44.67ID:yigrTQzb 毎日使うものだから。
752デフォルトの名無しさん
2020/03/17(火) 17:17:56.69ID:Aeuh89FK >>748
ネットではKotlinそのものに価値があるようなことを言う人を良く見かけるが、実際はGoogleがOracleとの訴訟に負けて、Javaを使っていることを注意されて、それで使われるようになっただけの言語、と捉えるのが標準見解だ。
ネットではKotlinそのものに価値があるようなことを言う人を良く見かけるが、実際はGoogleがOracleとの訴訟に負けて、Javaを使っていることを注意されて、それで使われるようになっただけの言語、と捉えるのが標準見解だ。
753デフォルトの名無しさん
2020/03/17(火) 17:27:30.89ID:4Vk7SyLR754デフォルトの名無しさん
2020/03/17(火) 17:31:48.86ID:4Vk7SyLR >>736
わかった。それじゃあかれこれ30年ぐらい使い続けているPerlと35年ぐらい使い続けているC言語を使うことにするよ。Javaのような新言語に手を出すのは止めておこう。
わかった。それじゃあかれこれ30年ぐらい使い続けているPerlと35年ぐらい使い続けているC言語を使うことにするよ。Javaのような新言語に手を出すのは止めておこう。
755デフォルトの名無しさん
2020/03/17(火) 18:15:43.46ID:Aeuh89FK756デフォルトの名無しさん
2020/03/17(火) 19:06:22.80ID:+Hw83ygo >>736
そういう観点なら、better javaのkotlinを学習する費用対効果は大きい。
実際、自分でクラスを設計するのならnull freeにできるkotlinの価値は高い。
……というより、型無しのnullを排除できないjavaの型システムが破綻しているだけだけどな。いいかげん、nullを受け付けないクラス/変数に対応してほしいぜ。
そういう観点なら、better javaのkotlinを学習する費用対効果は大きい。
実際、自分でクラスを設計するのならnull freeにできるkotlinの価値は高い。
……というより、型無しのnullを排除できないjavaの型システムが破綻しているだけだけどな。いいかげん、nullを受け付けないクラス/変数に対応してほしいぜ。
757デフォルトの名無しさん
2020/03/17(火) 19:15:03.66ID:Aeuh89FK758デフォルトの名無しさん
2020/03/17(火) 19:30:31.89ID:s3acJuhP でも、いざnull safetyの言語使ってみると!!演算子使う自分のコードが気になって負けた気になる
759デフォルトの名無しさん
2020/03/17(火) 19:33:21.73ID:3WRfeEJw !!は便利だけど後で見返すと消したくなるわ
見てて綺麗じゃない
見てて綺麗じゃない
760デフォルトの名無しさん
2020/03/17(火) 20:14:28.04ID:s3acJuhP それ
見てて気になるし負の感情がわくw
見てて気になるし負の感情がわくw
761デフォルトの名無しさん
2020/03/17(火) 23:29:23.16ID:I7Fcdy1u >>756
JDK25ぐらいでなんとかならんのかな
JDK25ぐらいでなんとかならんのかな
762デフォルトの名無しさん
2020/03/17(火) 23:54:31.16ID:Whb0iFr7 kotlin勉強に有効な書籍はなんだ?
763デフォルトの名無しさん
2020/03/18(水) 00:01:29.88ID:rB/x/s49 Javaできるならサンプル見ただけでなんとなく使える
本読まなきゃいけないような奴が手を出す言語ではない
本読まなきゃいけないような奴が手を出す言語ではない
764デフォルトの名無しさん
2020/03/18(水) 00:33:22.47ID:LQtyodHE 当然、Kotlin の会長である太郎本!
Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016
Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016
765デフォルトの名無しさん
2020/03/18(水) 00:35:21.26ID:qIM0w55M766デフォルトの名無しさん
2020/03/18(水) 00:37:04.70ID:JGfgRlCq >>763
サンプルコピペして使えた気になってるコピペプログラマーの典型みたいなこと言っててワロタ
サンプルコピペして使えた気になってるコピペプログラマーの典型みたいなこと言っててワロタ
767デフォルトの名無しさん
2020/03/18(水) 03:25:07.07ID:LQtyodHE 有名な雑食系エンジニア・KENTA も、YouTube で言ってたけど、
Scala が廃れた理由は、初心者にマウント取って、悦に入る人が多いからw
JVM 系は土方だから、土木業と同じ産業構造、多重請負・奴隷構造を持つから、
奴隷は初心者に対して、マウントを取らざるを得ないw
Ruby が、なぜナイスなのか、Cookpad などの自社サービス系だから。
多重請負・奴隷構造じゃないから
JVM 系は高学歴総合職・ノンプログラマーが、
低学歴奴隷・IT 土方を使って、もうける商売だから
だから、勧める人が少ない
Scala が廃れた理由は、初心者にマウント取って、悦に入る人が多いからw
JVM 系は土方だから、土木業と同じ産業構造、多重請負・奴隷構造を持つから、
奴隷は初心者に対して、マウントを取らざるを得ないw
Ruby が、なぜナイスなのか、Cookpad などの自社サービス系だから。
多重請負・奴隷構造じゃないから
JVM 系は高学歴総合職・ノンプログラマーが、
低学歴奴隷・IT 土方を使って、もうける商売だから
だから、勧める人が少ない
768デフォルトの名無しさん
2020/03/18(水) 07:13:52.23ID:yDvvdBVq >>767
言語外の仕様か。いくらか眉唾だが興味深い。
言語外の仕様か。いくらか眉唾だが興味深い。
769767
2020/03/18(水) 08:26:52.48ID:LQtyodHE770デフォルトの名無しさん
2020/03/18(水) 08:41:22.06ID:iE2DLaXa 動画で食ってる奴がエンジニアを名乗る不思議な世の中
771デフォルトの名無しさん
2020/03/18(水) 12:35:47.10ID:fwLKdVFo772デフォルトの名無しさん
2020/03/18(水) 13:23:33.04ID:B9Jc5Lrr >>757
Kotlinでそのようにしたければそのように書けば良い。できないわけではない。使い分けできて尚且つコンパイル時のチェックが厳しいだけ。
Kotlinでそのようにしたければそのように書けば良い。できないわけではない。使い分けできて尚且つコンパイル時のチェックが厳しいだけ。
773デフォルトの名無しさん
2020/03/18(水) 14:41:11.55ID:QhEd5Nre 昨日は変なおじさんが暴れてたなあ
774デフォルトの名無しさん
2020/03/18(水) 21:03:27.37ID:dhpxSw9T >>769
3行でまとめろ
3行でまとめろ
775デフォルトの名無しさん
2020/03/18(水) 21:05:09.86ID:qIM0w55M ここの人はjavaを触る前にkotlin触った人いる?
776767
2020/03/19(木) 03:59:43.72ID:JDU05jIv 要するに、複雑なものは習得コストが高いから、暇人しか集まらないようになる。
暇人は、初心者に参入されると食えなくなるから、マウント取って邪魔してくる
防衛省・原発みたいなものと同じ。
誰にも分からないから、チェック体制も構築できなくなる
誰にも何をやっているのか、さっぱり分からないけど、
上層部は高い給料をもらえる体制。
その体制を維持していくことが目的になっている
複雑なものには、真実ではないダマシが入ってくる。
人々を煙に巻く。それがガン
逆に、簡単なRuby には、嘘が付け入る隙がないから、誰もだませない。
これが本当のオープン。
ブロックチェーンみたいなもの。支配者が国民をだませない
暇人は、初心者に参入されると食えなくなるから、マウント取って邪魔してくる
防衛省・原発みたいなものと同じ。
誰にも分からないから、チェック体制も構築できなくなる
誰にも何をやっているのか、さっぱり分からないけど、
上層部は高い給料をもらえる体制。
その体制を維持していくことが目的になっている
複雑なものには、真実ではないダマシが入ってくる。
人々を煙に巻く。それがガン
逆に、簡単なRuby には、嘘が付け入る隙がないから、誰もだませない。
これが本当のオープン。
ブロックチェーンみたいなもの。支配者が国民をだませない
777デフォルトの名無しさん
2020/03/19(木) 05:48:04.13ID:z/hUxg19778デフォルトの名無しさん
2020/03/19(木) 07:39:11.58ID:urEXhT7g779デフォルトの名無しさん
2020/03/19(木) 12:38:32.21ID:3l1mva9i >>757
型自体の操作(メタプログラミングとか)ならともかく、まずはクラスの中での操作を考えるべき。多態とかnull objectとか。
javaで一番多いトラブルはヌルポだろ。本来なら真っ先に対策すべきだと思うがね。
型自体の操作(メタプログラミングとか)ならともかく、まずはクラスの中での操作を考えるべき。多態とかnull objectとか。
javaで一番多いトラブルはヌルポだろ。本来なら真っ先に対策すべきだと思うがね。
780デフォルトの名無しさん
2020/03/19(木) 12:52:07.67ID:yzbbR7me kentaってイケダハヤトみたいになってきたな
781デフォルトの名無しさん
2020/03/19(木) 15:15:37.74ID:VRFqiqhe >>779
C++ で言えばたったこんな程度のこと。
NULLの処理なんて難しくもなんとも無い。
CWnd *MyCreateWindow(const char *pszTitle); //プロトタイプ宣言
// 使い方の例:
MyCreateWindow(NULL); // タイトル無しでWindow作成
MyCreateWindow("タイトル文字列"); // タイトル有りでWindow作成
// 関数定義:
CWnd *MyCreateWindow(const char *pszTitle)
{
if ( pszTitle == NULL ) {
(タイトルが無いとして処理);
}
else {
(タイトルが有るとして処理);
}
}
C++ で言えばたったこんな程度のこと。
NULLの処理なんて難しくもなんとも無い。
CWnd *MyCreateWindow(const char *pszTitle); //プロトタイプ宣言
// 使い方の例:
MyCreateWindow(NULL); // タイトル無しでWindow作成
MyCreateWindow("タイトル文字列"); // タイトル有りでWindow作成
// 関数定義:
CWnd *MyCreateWindow(const char *pszTitle)
{
if ( pszTitle == NULL ) {
(タイトルが無いとして処理);
}
else {
(タイトルが有るとして処理);
}
}
782デフォルトの名無しさん
2020/03/19(木) 17:10:21.28ID:rBTxc+YZ なんで頓珍漢な流れになってるんだ
nullを安全に扱える言語なのにKotlin未経験者多すぎだろこのスレ
nullを安全に扱える言語なのにKotlin未経験者多すぎだろこのスレ
783デフォルトの名無しさん
2020/03/19(木) 17:16:34.26ID:/JEYrZ/n 荒らし目的のJAVAコーダーしかおらんやろ
784デフォルトの名無しさん
2020/03/19(木) 18:04:34.63ID:j3UhLeRz ことりん
785デフォルトの名無しさん
2020/03/19(木) 18:22:01.77ID:TkZTFqNu それnullでやる必要あるの?
786デフォルトの名無しさん
2020/03/19(木) 19:39:51.06ID:YRL0u/U8 言語進化の歴史なんてまるで知らんのだろうな
787デフォルトの名無しさん
2020/03/19(木) 20:12:45.87ID:jEN69kGO 知る必要あるの?
788デフォルトの名無しさん
2020/03/19(木) 20:16:42.34ID:Pzb6grX0 考えてみると、ない
789デフォルトの名無しさん
2020/03/19(木) 20:20:50.17ID:XcKebLm1 ネットでドヤ顔したりマウント取ったりするには有用な知識
790デフォルトの名無しさん
2020/03/19(木) 21:17:12.88ID:rBTxc+YZ >>785
特殊な場合があるときにそれを-1とかで表すよりも100億倍まし
特殊な場合がないのにnullableにするのは論外
何も考えず!!演算子を使うのも論外
NullObjectを作るかどうかはメリットデメリットあるのでケースバイケース
脳死で作るのはJavaでenumを使わずにTypesafe enumパターンを手書きするような冗長さになることもあるし
下手に使うと-1と同じ弱点を埋め込む場合もある
nullに忌避感がある人はこのスレをnullで検索すると議論が参考になるかもしれない
特殊な場合があるときにそれを-1とかで表すよりも100億倍まし
特殊な場合がないのにnullableにするのは論外
何も考えず!!演算子を使うのも論外
NullObjectを作るかどうかはメリットデメリットあるのでケースバイケース
脳死で作るのはJavaでenumを使わずにTypesafe enumパターンを手書きするような冗長さになることもあるし
下手に使うと-1と同じ弱点を埋め込む場合もある
nullに忌避感がある人はこのスレをnullで検索すると議論が参考になるかもしれない
791デフォルトの名無しさん
2020/03/19(木) 22:46:33.35ID:z/hUxg19 >>757 はKotlinを否定してJavaでnullを扱いたいのか、KotlinのT?型と?.演算子や?:演算子を奨励したいのか
読んでいてよく分からなくなってきた。
読んでいてよく分からなくなってきた。
792デフォルトの名無しさん
2020/03/19(木) 22:48:27.28ID:TkZTFqNu793デフォルトの名無しさん
2020/03/20(金) 01:28:48.16ID:405ti7Ej >>792
少し例が悪かったので変えてみる:
CWnd *MyCreateWindow(CWnd *pParent); //プロトタイプ宣言
// 使い方の例:
MyCreateWindow(NULL); // 親の無いWindowを作成。自分が最上位Windowとなる。
MyCreateWindow(親Window); // 指定したWindowの子WindowとしてWindowを作成
// 関数定義:
CWnd *MyCreateWindow(CWnd *pParent)
{
if ( pParent == NULL ) {
(親が存在しない最上位Windowを新規作成);
}
else {
(pParentの子Windowを新規作成);
}
}
少し例が悪かったので変えてみる:
CWnd *MyCreateWindow(CWnd *pParent); //プロトタイプ宣言
// 使い方の例:
MyCreateWindow(NULL); // 親の無いWindowを作成。自分が最上位Windowとなる。
MyCreateWindow(親Window); // 指定したWindowの子WindowとしてWindowを作成
// 関数定義:
CWnd *MyCreateWindow(CWnd *pParent)
{
if ( pParent == NULL ) {
(親が存在しない最上位Windowを新規作成);
}
else {
(pParentの子Windowを新規作成);
}
}
794デフォルトの名無しさん
2020/03/20(金) 01:34:03.99ID:405ti7Ej >>793
もし、NULLを使いたくないのなら次のようにするしかないことになり、2つの引数に分かれてしまいむしろ危険性が増すばかりでなく、親が存在しない場合にはダミーのWindowのアドレスを指定しなければならなくなる:
CWnd *MyCreateWindow(CWnd *pParent, BOOL bChild); //プロトタイプ宣言
// 使い方の例:
MyCreateWindow(ダミーのWindow, FALSE); // 親の無いWindowを作成。自分が最上位Windowとなる。
MyCreateWindow(親Window, TRUE); // 指定したWindowの子WindowとしてWindowを作成
// 関数定義:
CWnd *MyCreateWindow(CWnd *pParent, BOOL bChild)
{
if ( !bChild ) {
(親が存在しない最上位Windowを新規作成);
}
else {
(pParentの子Windowを新規作成);
}
}
もし、NULLを使いたくないのなら次のようにするしかないことになり、2つの引数に分かれてしまいむしろ危険性が増すばかりでなく、親が存在しない場合にはダミーのWindowのアドレスを指定しなければならなくなる:
CWnd *MyCreateWindow(CWnd *pParent, BOOL bChild); //プロトタイプ宣言
// 使い方の例:
MyCreateWindow(ダミーのWindow, FALSE); // 親の無いWindowを作成。自分が最上位Windowとなる。
MyCreateWindow(親Window, TRUE); // 指定したWindowの子WindowとしてWindowを作成
// 関数定義:
CWnd *MyCreateWindow(CWnd *pParent, BOOL bChild)
{
if ( !bChild ) {
(親が存在しない最上位Windowを新規作成);
}
else {
(pParentの子Windowを新規作成);
}
}
795デフォルトの名無しさん
2020/03/20(金) 01:38:28.40ID:i2c+AgK7796デフォルトの名無しさん
2020/03/20(金) 01:41:51.33ID:405ti7Ej >>794
現実には、「ダミーのWindow(のアドレス)」なんてものは作りえないかもしれない。
だとすれば、NULLを使わずにこれらの事を行いたいなら次のように、関数を2つに分けるしかなくなってしまうかもしれない。
しかしそれは間違いが入り込みやすい良く無いプログラムである:
CWnd *MyCreateTopWindow(); //親の無いWindowを作成する関数。
CWnd *MyCreateChildindow(CWnd *pParent); //pParentの子Windowを作成する関数。
// 使い方の例:
MyCreateTopWindow(); // 親の無いWindowを作成。自分が最上位Windowとなる。
MyCreateChildWindow(親Window); // 指定したWindowの子WindowとしてWindowを作成
現実には、「ダミーのWindow(のアドレス)」なんてものは作りえないかもしれない。
だとすれば、NULLを使わずにこれらの事を行いたいなら次のように、関数を2つに分けるしかなくなってしまうかもしれない。
しかしそれは間違いが入り込みやすい良く無いプログラムである:
CWnd *MyCreateTopWindow(); //親の無いWindowを作成する関数。
CWnd *MyCreateChildindow(CWnd *pParent); //pParentの子Windowを作成する関数。
// 使い方の例:
MyCreateTopWindow(); // 親の無いWindowを作成。自分が最上位Windowとなる。
MyCreateChildWindow(親Window); // 指定したWindowの子WindowとしてWindowを作成
797デフォルトの名無しさん
2020/03/20(金) 01:45:38.48ID:405ti7Ej798デフォルトの名無しさん
2020/03/20(金) 01:48:47.36ID:405ti7Ej >>797
「親が有るかどうか」
という一つのパラメータだけなら、まだ良いが、
「メニューオブジェクトを渡すか渡さないかでメニューが付くかどうか分ける」
なども付いたりすれば、組み合わせ爆発が起きるため、関数を完全に分けてしまうのは非常に非効率で危険なプログラミングとなる。
「親が有るかどうか」
という一つのパラメータだけなら、まだ良いが、
「メニューオブジェクトを渡すか渡さないかでメニューが付くかどうか分ける」
なども付いたりすれば、組み合わせ爆発が起きるため、関数を完全に分けてしまうのは非常に非効率で危険なプログラミングとなる。
799デフォルトの名無しさん
2020/03/20(金) 01:52:10.51ID:i2c+AgK7 共通化が必要ならNullObjectの多態でも関数型でも使えばいいよ
C言語時代からアップデートされてない知識でモダン言語でのプラクティスを説こうとしているのが謎だよ
タイムスリップしたお侍が自衛隊に兵法を指南するような冗談だよ
C言語時代からアップデートされてない知識でモダン言語でのプラクティスを説こうとしているのが謎だよ
タイムスリップしたお侍が自衛隊に兵法を指南するような冗談だよ
800デフォルトの名無しさん
2020/03/20(金) 01:56:11.47ID:i2c+AgK7 組み合わせ爆発についてはデフォルト引数使えばよろし
801デフォルトの名無しさん
2020/03/20(金) 01:59:36.15ID:405ti7Ej802デフォルトの名無しさん
2020/03/20(金) 02:03:02.63ID:405ti7Ej803デフォルトの名無しさん
2020/03/20(金) 02:49:45.65ID:4pMtFWMQ804デフォルトの名無しさん
2020/03/20(金) 02:54:28.27ID:405ti7Ej >>803
それは可能だけど、グラフィックのFrameBufferの容量が大きいので、
デスクトップに浮いているWindowの場合にChildWindowと同じ処理をしたのでは
メモリーの無駄使いになることがあったり、
デスクトップに浮いているWindowとChildWindowとでは動作がかなり違っていたり
することが多いので初期化段階から if 文で場合分けしないと無理が有る事が多い。
だから、そのような「統一した考え」では結局は、効率が下がるために
実際には駄目プログラムとなる。
それは可能だけど、グラフィックのFrameBufferの容量が大きいので、
デスクトップに浮いているWindowの場合にChildWindowと同じ処理をしたのでは
メモリーの無駄使いになることがあったり、
デスクトップに浮いているWindowとChildWindowとでは動作がかなり違っていたり
することが多いので初期化段階から if 文で場合分けしないと無理が有る事が多い。
だから、そのような「統一した考え」では結局は、効率が下がるために
実際には駄目プログラムとなる。
805デフォルトの名無しさん
2020/03/20(金) 03:01:28.97ID:405ti7Ej >>804
さらに付け加えるなら、RootWindow のオブジェクトの名前を「覚えるのが面倒」
だったり、打ち込むのが長くなって大変と言う事情もある。
例えば、Windowの場合には、「DesktopWindow」という名前で、
Menuオブジェクトが無い場合には、「MenuNull」みたいな名前となる。
しかし実際にはこんな簡単な名前で無い事が多いので、マニュアルをいちいち調べ
直す手間がいる。
一方、NULLだといろんな場面全てNULLなので、覚えることが少なくて済むし、
打ち込むにも4文字で済むので楽。
関数を呼び出す際も短いので一行で書ける場合が多くなり、見易い。
さらに付け加えるなら、RootWindow のオブジェクトの名前を「覚えるのが面倒」
だったり、打ち込むのが長くなって大変と言う事情もある。
例えば、Windowの場合には、「DesktopWindow」という名前で、
Menuオブジェクトが無い場合には、「MenuNull」みたいな名前となる。
しかし実際にはこんな簡単な名前で無い事が多いので、マニュアルをいちいち調べ
直す手間がいる。
一方、NULLだといろんな場面全てNULLなので、覚えることが少なくて済むし、
打ち込むにも4文字で済むので楽。
関数を呼び出す際も短いので一行で書ける場合が多くなり、見易い。
806デフォルトの名無しさん
2020/03/20(金) 05:05:17.32ID:Edy1QoAW >>793
Kotlin ならこんな風にすれば良いんじゃないの?
fun myCreateWindow(parent: CWnd? = null): CWnd = if (parent == null) 親なし上位Window作成 else parentの子Window作成
nullable がどうしても嫌ならこうするか。
fun myCreateWindow(parent: CWnd = 親なし上位Window): CWnd = if (parent != 親なし上位Window) parentの子Window作成 else parent
Kotlin ならこんな風にすれば良いんじゃないの?
fun myCreateWindow(parent: CWnd? = null): CWnd = if (parent == null) 親なし上位Window作成 else parentの子Window作成
nullable がどうしても嫌ならこうするか。
fun myCreateWindow(parent: CWnd = 親なし上位Window): CWnd = if (parent != 親なし上位Window) parentの子Window作成 else parent
807デフォルトの名無しさん
2020/03/20(金) 06:32:14.26ID:Oo7Eeggj808デフォルトの名無しさん
2020/03/20(金) 06:53:01.35ID:4pMtFWMQ809デフォルトの名無しさん
2020/03/20(金) 07:53:37.14ID:i2c+AgK7 >>801
書かれてたサンプルコードでは真っ先に分岐が入ってたから「この場合は」オーバーロードかメソッド分割がベターと回答した
後付けされた条件を加味するなら>>806のnullable型がいい
privateな処理内で局所的にnullabeを使うことに異論はない
Kotlinならヌルポが出ないから安全
覚えるのが面倒ということまで気にする公開APIなら親にnullを指定すると親無しになるというルールを覚えさせるよりも
親の引数を省略可能にするかメソッド名を用途別に分けてクラス内で処理を共通化した方が使いやすい
nullは単一なので楽という話は、nullは単一なのでいろんな意味がまぜこぜに使われ区別できないという裏返しでもある
variantは型がないので楽、グローバル変数は楽、staticは楽というのに通じる
書かれてたサンプルコードでは真っ先に分岐が入ってたから「この場合は」オーバーロードかメソッド分割がベターと回答した
後付けされた条件を加味するなら>>806のnullable型がいい
privateな処理内で局所的にnullabeを使うことに異論はない
Kotlinならヌルポが出ないから安全
覚えるのが面倒ということまで気にする公開APIなら親にnullを指定すると親無しになるというルールを覚えさせるよりも
親の引数を省略可能にするかメソッド名を用途別に分けてクラス内で処理を共通化した方が使いやすい
nullは単一なので楽という話は、nullは単一なのでいろんな意味がまぜこぜに使われ区別できないという裏返しでもある
variantは型がないので楽、グローバル変数は楽、staticは楽というのに通じる
810デフォルトの名無しさん
2020/03/20(金) 07:58:22.42ID:i2c+AgK7 メソッド引数にnullを与えたときヌルポが出るのかトップレベルウィンドウになるのかドキュメントを読まないと判別できない公開APIは残念
省略時デフォルトとして内部的に使うのとはまた違う
省略時デフォルトとして内部的に使うのとはまた違う
811デフォルトの名無しさん
2020/03/20(金) 09:18:27.10ID:CQQp7Y75 Kotlin では、プログラマーが自分で、null を判断したら、ダメ!
null チェックを書かない人がいるから、バグが残る
C++ で言えば、スマートポインターみたいなものを使って、
自動的に判断するのが正しい
どこかで、nullチェックをして、nullじゃなければ、
null許容型を使わないように書く
null チェックを書かない人がいるから、バグが残る
C++ で言えば、スマートポインターみたいなものを使って、
自動的に判断するのが正しい
どこかで、nullチェックをして、nullじゃなければ、
null許容型を使わないように書く
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… [BFU★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★3 [Hitzeschleier★]
- 【将棋】福間香奈 女流六冠が会見 妊娠・出産でタイトル戦の事実上不戦敗 「妊娠したら、どちらか一方を諦めないといけない状況」★2 [冬月記者★]
- かつや、明日からカツ丼(竹)790円→590円、ロースカツ定食830円→630円、カツカレー(竹)990円→790円 画像あり [お断り★]
- 【配信】TikTokで収益化を剥奪される日本人クリエイターが続出 [muffin★]
- 日本、G7への中国招待を懸念 議長国フランスに慎重な対応要請 [どどん★]
- 高市早苗、トランプおやびんに泣きつくwwwwwwwwwwwwwwwwwwwwwwww [834922174]
- 防衛省「了解は言っていない」 [966095474]
- 企業・団体献金の規制強化をめぐる党首間協議について高市「引き継ぎ受けてないし知らん。約束ではない。野田も誘ってくれないし」 [389326466]
- 中国、日本人tiktokの収益剥奪開始wmwmwmwmwmwm [834922174]
- ケンモメンってなんでこんなに反日が多いの? [866936191]
- 防衛省「日本は正当な対応をした。危険行為をしたのは中国。中国は再発防止を徹底せよ」 [834922174]
