1 名前:デフォルトの名無しさん mailto:sage [2018/12/08(土) 20:29:41.41 ID:oXOQORcd.net] JetBrainsが開発した期待の新言語、Androidの公式開発言語にしてサーバーサイドもなんでもいけるKotlinについて語りましょう ※前スレ https://mevius.5ch.net/test/read.cgi/tech/1531818027/
736 名前:デフォルトの名無しさん [2019/05/20(月) 20:48:41.91 ID:oKvxv21R.net] そういやPython大ブームだね。 機械学習関係で火が着いた感じか。
737 名前:デフォルトの名無しさん mailto:sage [2019/05/20(月) 21:27:41.17 ID:QYS7YbVl.net] 数年後に始まる小学校でのプログラミング授業もPython採用と予想。
738 名前:デフォルトの名無しさん mailto:sage [2019/05/20(月) 21:33:58.54 ID:TjPZT1E7.net] 授業は基本マイクラを使うぞ
739 名前:デフォルトの名無しさん mailto:sage [2019/05/20(月) 22:00:59.30 ID:9o82qJOc.net] kotlinのおすすめ無料学習教材は?
740 名前:デフォルトの名無しさん mailto:sage [2019/05/20(月) 22:10:44.54 ID:0DZMUBSm.net] 勧めるようなものは特にない
741 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 08:28:21.83 ID:2xcSjans.net] なんか公式のチュートリアルみたいなのなかったっけ
742 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 08:31:57.13 ID:qls//8Wz.net] おすすめかどうかを意識しろ あるかどうかではなく、おすすめかどうかだ 検索すりゃこのご時世英語含めてたくさん出てくる そんなの見りゃわかる おすすめできるものかどうかがいちばん大事
743 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 10:08:36.16 ID:x7pfOsc7.net] ただで教える側に求めすぎだろw
744 名前:デフォルトの名無しさん [2019/05/21(火) 10:10:30.25 ID:YlTjoOUk.net] >>723 NGに入れろ スッキリ ▼ ▲
745 名前:デフォルトの名無しさん [2019/05/21(火) 10:56:17.04 ID:KjOgf3b2.net] kotlin使った事無くて勉強中なんですが null安全は通信で届いたオブジェクトについてどう働きますか? あるいはデシリアライズされたオブジェクトについて そこでもnull安全ですか?
746 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 11:04:08.23 ID:x7pfOsc7.net] 当然どんなオブジェクトであれKotlinで書かれている限りnull安全は機能するけど、君はそもそもnull安全を誤解してそうな予感がする
747 名前:デフォルトの名無しさん [2019/05/21(火) 11:11:41.76 ID:KjOgf3b2.net] 検索すると、null不可な変数にnullを代入できないこと、とあります。 そうすると通信で受信したオブジェクト等はどうなるのかなと。 この理解は間違っていますか?
748 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 11:39:29.09 ID:c7g0QxSl.net] どこまで「使ったことない」かにもよるんだが ・nullかどうかの条件分岐をクリアした変数 ・nullかどうかの条件分岐をまだやってない変数 の2つがあるだけだと思っていい 外部から取得したデータがあったとして、nullチェックをまだしていないならnullableだ どこかで誰かが(静的文法解析上)nullではないという条件分岐を通したあとならそれはnonnull どこかで誰かがその後にnullになるかもしれない処理を通したらnullableに戻る
749 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 12:29:35.90 ID:ZAINLMmO.net] >>736 文字列とか通信データから、新たなオブジェクトを構築するのでしょ? 構築できたら、null ではないし、 データがおかしくて構築できなかったら、エラー!
750 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 12:40:36.99 ID:sr6+MIRN.net] 当然nonnull出ない変数ににnullをぶち込んだらエラーになる
751 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 13:55:21.57 ID:2xcSjans.net] >>736 nullを入れられない型なのにnullを入れようとしたらその時点でオブジェクトを生成できずにエラー なので、json文字列を受け取ってオブジェクトを生成する部分で要件に合わせて適宜いい感じに処理する必要がある
752 名前:デフォルトの名無しさん [2019/05/21(火) 14:53:46.84 ID:BVi2WQ22.net] >>736 試してみればわかると思うが、nillableな型にnull入れてObjectOutputStreamで書いた後でnullableでなくしてコンパイルしなおしてからObjectInputStreamで読もうとするとInvalidClassExceptionが出る。
753 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 15:17:02.88 ID:RVxsm+ja.net] kotlin使ったことないって奴向けの説明ではないな
754 名前:デフォルトの名無しさん [2019/05/21(火) 16:06:22.73 ID:BVi2WQ22.net] 図解しないとダメか?w
755 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 17:40:26.31 ID:x7pfOsc7.net] そもそも聞かれてることに対する回答としてはピントがズレてる 自分の知識自慢したいイキリオタク感がすごい
756 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 18:43:35.05 ID:gj4VcULk.net] >>734 がおそらくしているであろう幻想を抱いていた時期が自分にもありました とエスパーしながらいうと、通信で受信したオブジェクト等はnullableな型を持つことになるだけで、 Kotlinにしたからといってnullチェックが要らなくなるわけではない。 >>736 には誰の説明が分かりやすかっただろうか。
757 名前:デフォルトの名無しさん [2019/05/21(火) 20:08:28.33 ID:BVi2WQ22.net] >>744 ずれてないだろ。通信でオブジェクト送る話なんだから。
758 名前:デフォルトの名無しさん [2019/05/21(火) 20:11:45.34 ID:grT0tw0/.net] Javaのコードを呼び出すところは、全部そうだね。 Kotlinはnullableであることを「強制しない」。 AndroidとかjavaxのAnnotationでもついていない限り。
759 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 20:44:09.88 ID:wTyF+2my.net] >>728 https://play.kotlinlang.org/koans/overview
760 名前:デフォルトの名無しさん [2019/05/21(火) 21:17:46.88 ID:KjOgf3b2.net] null安全は@NotNullとどう違いますか?
761 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 23:00:11.33 ID:MtIoFqpw.net] コンパイルエラーになるかぬるぽでばーんってなるかの違い
762 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 23:15:32.28 ID:dJ+4PuSm.net] null安全は以下の機能を包括する言葉 ・型システムでnull許容とnull不可を区別出来る ・null許容型の取扱いを容易にするモナド操作などを言語仕様や標準ライブラリに持つ
763 名前:デフォルトの名無しさん [2019/05/22(水) 00:26:45.64 ID:s0RuNCYO.net] ∧_∧ / ̄ ̄ ( ´∀`)< ド? ( ) \__ │ │ │ (__)___)
764 名前:デフォルトの名無しさん mailto:sage [2019/05/22(水) 13:10:44.21 ID:o0mLtMWH.net] iosアプリ作るのは現実的にいけそう?
765 名前:デフォルトの名無しさん [2019/05/22(水) 15:26:22.63 ID:06P4CJxl.net] いけるいける
766 名前:デフォルトの名無しさん mailto:sage [2019/05/22(水) 17:11:00.38 ID:ddL9armR.net] 大丈夫大丈夫、なんの問題もない
767 名前:デフォルトの名無しさん mailto:sage [2019/05/22(水) 19:37:38.21 ID:N+dUt+tn.net] 逆引きのAndroid開発用のKotlin本ないの? Javaのはあるけどさ
768 名前:デフォルトの名無しさん mailto:sage [2019/05/22(水) 21:14:49.49 ID:o0mLtMWH.net] >>754 >>755 ほんとのほんとに? 作り始めてまうで?
769 名前:デフォルトの名無しさん mailto:sage [2019/05/22(水) 22:18:54.87 ID:mQdasoF8.net] うん、大丈夫、なにも心配することないから
770 名前:デフォルトの名無しさん mailto:sage [2019/05/23(木) 00:10:33.20 ID:K2oq56d+.net] >>754 ,755,758 iOSアプリを実際に作った人がこの板にこんなにいるとは思えないんだがw いや、自分もないんだけどさw
771 名前:デフォルトの名無しさん [2019/05/23(木) 00:56:30.37 ID:ClSxeVCE.net] Kotlinでの競技プログラミングのコンテストがあるよ! 5月28日の23時35分から2時間半! Kotlin Heroes Announcement https://codeforces.com/blog/entry/67162 https://codeforces.com/contests/1170
772 名前:デフォルトの名無しさん [2019/05/23(木) 01:52:40.87 ID:kvy164Qh.net] 英語で書かれた問題を解読するだけで2時間半が経過してしまいそうな予感
773 名前:デフォルトの名無しさん mailto:sage [2019/05/23(木) 02:45:36.97 ID:K2oq56d+.net] >>760 IntがintになるかIntegerになるか考慮しないといけなかったらちょっと嫌だなあ。
774 名前:デフォルトの名無しさん mailto:sage [2019/05/23(木) 06:58:10.23 ID:ZvIUMcmJ.net] >>759 大丈夫、Kotlinも業務で使ってるしiOSアプリも業務でいくつも作ってるからさ Kotlin nativeのiOSアプリも実際に作ってみたって人と勉強会の懇親会で話したことがある
775 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 09:20:43.95 ID:1flrLOhd.net] >>756 必要か?
776 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 13:57:22.09 ID:WFuDBTgU.net] Listの初期化って var list = listOf<Hoge>() と var list :Hoge? = null どっちがいいの?
777 名前:デフォルトの名無しさん [2019/05/24(金) 15:11:48.77 ID:10iCK04b.net] >>765 全く違うもの出されてどちらがと聞かれても・・・
778 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 16:53:05.84 ID:cg0Vnpe0.net] >>765 その2つでいうなら下はリストを作れてないから上一択になるぞw
779 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 16:57:14.79 ID:WFuDBTgU.net] 間違えた下は var list :List<Hoge>? = null ね これならどっちがいい?
780 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 16:59:34.27 ID:cg0Vnpe0.net] どちらにせよその2つは作られる型が違う nullableにする必要があるかどうかで使い分けろとしか
781 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 17:00:11.96 ID:cg0Vnpe0.net] 俺だったら何か理由がない限り上
782 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 17:00:17.36 ID:g+HqU4NL.net] 特別な理由がない限り上はvarじゃなくてvalにすべきじゃない?
783 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 17:15:07.02 ID:WFuDBTgU.net] >>770 なぜ? >>771 valにしたら代入できないじゃん
784 名前:デフォルトの名無しさん [2019/05/24(金) 17:52:50.04 ID:8qiM3xuo.net] val にして空の MutableList 作るのは?
785 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 18:01:30.45 ID:XLHoRxVW.net] 俺はemptyListだな
786 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 18:03:21.78 ID:6OR0USBX.net] ?取るのめんどいから空のリストにしてくれ
787 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 18:27:38.07 ID:g+HqU4NL.net] >>772 ああごめん val にしてMutableList な だが、おまえが欲しいのはたぶん var list = emptyList<Hoge>()
788 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 18:51:13.35 ID:xfff2+MO.net] >>772 Kotlinにおいてはvarもnullableもごく限られた場面でしか使わない例外的なものだということは知っておいた方が良い。 nullableは無駄に取り扱いが面倒だったり、varは予期せぬバグを生み出す温床になり得るから。 なので val list = mutableListof<Unko>() が、大抵の場面で正解。
789 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 19:42:38.12 ID:Oa3ZkFre.net] Unkoって何ですか
790 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 20:03:18.59 ID:g/LimCLF.net] えっお前んちUnkoねーのだっせー
791 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 20:04:30.18 ID:6mh6tvLx.net] かといって盲目的に mutable collection を使うのもどうかと思うがな
792 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 20:17:54.95 ID:73sdMVIH.net] 盲目的も何もコンテキストが分からないんだから一般論としてvarを使うよりはMutableListを使う方が適してると言うしかないだろ どんな状況でも何がなんでもMutableListを使えなんて誰も言ってない
793 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 20:23:02.45 ID:73sdMVIH.net] 俺も>>777 にするな。 もしくはlateinitを使うか、どちらか。
794 名前:デフォルトの名無しさん mailto:sage [2019/05/25(土) 05:49:19.79 ID:wB1WneOU.net] >>768 状況にもよるけど、>>782 で出たlateinitか、場所によっては val list by lazy{ [List<Hoge>を返す式] } そもそも、listの要素が出揃っていない段階でlistを宣言するのが適切でない可能性も。 val list = [List<Hoge>を返す式] のようにいきなり最後まで計算するか、少々面倒だけど>>773 の言うように一旦 val temporaryList = mutableListOf<Hoge>() して要素が出揃ったら val list = temporaryList.toList() するとか。
795 名前:デフォルトの名無しさん mailto:sage [2019/05/25(土) 06:37:38.07 ID:fh0ztzaz.net] lateinitはvalにできないから糞
796 名前:デフォルトの名無しさん mailto:sage [2019/05/25(土) 07:20:32.83 ID:Kvnc/U5Q.net] そんなご無体な
797 名前:デフォルトの名無しさん mailto:sage [2019/05/25(土) 08:02:42.85 ID:9ELY4FpV.net] valだけが正しい。valにできないなら新しいvalにコピーするべき
798 名前:768 mailto:sage [2019/05/25(土) 10:50:32.51 ID:VlF1HZqT.net] >>783 それだとvalじゃなくてvarじゃね? 始めに空のList入れる意見が多いけど結局使う時にemptyかチェックするでしょ nullかどうかチェックするのと同じじゃね?
799 名前:デフォルトの名無しさん mailto:sage [2019/05/25(土) 10:57:44.94 ID:VlF1HZqT.net] nullの警告が厳しいからこそ使うのはどうだろうか nullならnullだと知らされるがemptyじゃ何の警告も出ない
800 名前:デフォルトの名無しさん mailto:sage [2019/05/25(土) 13:1
] [ここ壊れてます]
801 名前:6:02.71 ID:exhgzloH.net mailto: ・リスト自体を構築するケース ・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で良い [] [ここ壊れてます]
802 名前:デフォルトの名無しさん mailto:sage [2019/05/25(土) 13:19:44.44 ID:F8alA812.net] >>787 そうとは限らない 単にリストの要素数が0ならそれでいいケースも多い そう考えると明らかに初期化を忘れてるのが分かるという意味でnullを入れておくのもいいかもしれない
803 名前:デフォルトの名無しさん [2019/05/25(土) 17:48:30.03 ID:AAsiXMmO.net] Androidなどで、非同期処理が関わってくると、 valは注意して使わないといけない場面が、意外にたくさんあることに気が付く。
804 名前:デフォルトの名無しさん mailto:sage [2019/05/25(土) 18:20:07.77 ID:lux9UzI+.net] Activityのbindingはby lazyのval Fragmentのbindingはlateinit var
805 名前:デフォルトの名無しさん mailto:sage [2019/05/26(日) 23:17:26.29 ID:/1jO9AOV.net] >>765 そもそもローカル変数の話なのかプロパティの話なのか…
806 名前:デフォルトの名無しさん mailto:sage [2019/05/27(月) 12:03:53.57 ID:j1Bw0s67.net] emptyListってシングルトンだから生成コストがないってのは分かるんだけど、 今時その程度の生成コストを気にする場面ってそんなない気もする 富豪的プログラミングなんて言われるかもしれんけど、もはやそれ自体死語だしな
807 名前:デフォルトの名無しさん [2019/05/27(月) 12:57:29.86 ID:ffeERoRR.net] >>793 ローカルならそもそも悩まない。 val且つmutableにして都度addallするか、var且つimmutableで丸ごと置き換えるか、はケースバイケースで。
808 名前:デフォルトの名無しさん mailto:sage [2019/05/27(月) 13:34:53.60 ID:IGUdGZaE.net] valで都度変数作るからなぁ
809 名前:デフォルトの名無しさん mailto:sage [2019/05/27(月) 14:33:20.72 ID:24xkxhR7.net] プロパティの話ね mutableにしてもそもそも生成は別のところでListごと作るからmutableだろうがListだろうが関係ない 当然後から代入するからvalにはできない
810 名前:デフォルトの名無しさん mailto:sage [2019/05/27(月) 14:57:26.23 ID:EJcO498B.net] copyメソッド
811 名前:デフォルトの名無しさん mailto:sage [2019/05/27(月) 23:34:59.34 ID:s432cqVY.net] サーバーサイドばっかだからかもしれんがプロパティにMutableListを使うことがそうそう無い データクラスのコンストラクタ引数に val list: List はよくある
812 名前:デフォルトの名無しさん mailto:sage [2019/05/27(月) 23:56:54.45 ID:zFWKvIPE.net] 内部DSLとかの指示を構築する系の実装で使うかな
813 名前:デフォルトの名無しさん mailto:sage [2019/05/28(火) 05:58:36.43 ID:sEeuOOEX.net] サーバーサイドかどうか関係なくない? 俺はよく使うよ。例えばツリー構造になってるデータを読み込む処理で自分の子ノードのリストを持つため、とか、これ昨日書いた。
814 名前:デフォルトの名無しさん mailto:sage [2019/05/28(火) 06:33:15.65 ID:f4BtQ/HR.net] val text = "" って val text :String = "" って書いた方がいい?
815 名前:デフォルトの名無しさん mailto:sage [2019/05/28(火) 07:05:11.16 ID:Bdaqy37y.net] >>802 やるメリットは特にない むしろ本当に宣言通りStringかどうかチェックするぶんビルド遅い
816 名前:デフォルトの名無しさん mailto:sage [2019/05/28(火) 08:10:42.72 ID:sEeuOOEX.net] >>802 いらない。何をどう見ても明らかにStringだから意味ない。
817 名前:デフォルトの名無しさん mailto:sage [2019/05/28(火) 23:54:42.49 ID:g+jKUI0N.net] >>802 Javaのvarで似たような議論がある。 https://orablogs-jp.blogspot.com/2018/03/style-guidelines-for-local-variable.html
818 名前:デフォルトの名無しさん mailto:sage [2019/05/29(水) 01:39:37.10 ID:KhqOXHGU.net] Kotlinに、SwiftのExpressibleByStringLiteralみたいなのが無くて本当に良かったと思う あれは呪いだ
819 名前:デフォルトの名無しさん mailto:sage [2019/05/29(水) 02:17:57.59 ID:Qb2i3AGM.net] >>802 は、IntelljIDEA か Android Studio 使ってないのかね? 警告消して緑色になるようがんばれ おれは警告にどうしても従えない場合でも、アノテーション使って絶対緑色にする
820 名前:デフォルトの名無しさん mailto:sage [2019/05/29(水) 04:33:25.97 ID:XoYuC6Fl.net] Charは'a'なのね
821 名前:デフォルトの名無しさん mailto:sage [2019/05/29(水) 06:05:24.96 ID:ouhOLTM0.net] >>806 なにそれ?
822 名前:デフォルトの名無しさん mailto:sage [2019/05/29(水) 07:50:04.16 ID:KhqOXHGU.net] >>809 https://ideone.com/3YQTSZ 文字列リテラルが本当に文字列なのか分からなくなるやつ
823 名前:デフォルトの名無しさん mailto:sage [2019/05/31(金) 14:21:13.30 ID:Jjn+Dq6k.net] >>806 PHPだと1リクエストごとにFWの初期化処理を行っているのが遅い理由でしょ 特にLaravelは読み込むファイルも多いし重い 他の言語だとアプリケーションサーバ起動時に一回だけ初期化処理をするので1リクエストあたりの処理が少ない PHPでもSwooleやReactPHPなどを使えば同じことはできるけど、まあ既存のFWを乗っけてもバグりやすいだろうね
824 名前:デフォルトの名無しさん mailto:sage [2019/05/31(金) 18:46:44.28 ID:R6sHUJ5K.net] なんの話だよ
825 名前:デフォルトの名無しさん mailto:sage [2019/05/31(金) 22:32:24.72 ID:VAUlN9pw.net] やべぇやつが来たなwww
826 名前:デフォルトの名無しさん mailto:sage [2019/06/01(土) 07:53:39.61 ID:6Ne8KtIA.net] 普通に誤爆でしょ
827 名前:デフォルトの名無しさん [2019/06/01(土) 11:37:30.64 ID:OCCxHMSa.net] android用途:元気 サーバーサイド用途:全く流行らず kotlin/native: 瀕死 kotlin.js: 死亡 現状こんな認識なんだけど合ってる?
828 名前:デフォルトの名無しさん mailto:sage [2019/06/01(土) 11:43:16.53 ID:HBXiOctn.net] Xamarin程の糞はない
829 名前:デフォルトの名無しさん mailto:sage [2019/06/01(土) 12:20:19.48 ID:oJ6AvSx+.net] >>815 Kotlin nativeはなんかもう不死鳥とかみたく蘇ったりする予定なので書いておいてください
830 名前:デフォルトの名無しさん [2019/06/01(土) 14:59:33.17 ID:7bqJsR1f.net] 身内のGraalにトドメ刺されて終わりだろ。
831 名前:デフォルトの名無しさん mailto:sage [2019/06/01(土) 15:47:15.77 ID:v1/bDBif.net] /NativeがGraalにやられても/JVMがスイッチするから大丈夫
832 名前:デフォルトの名無しさん mailto:sage [2019/06/01(土) 16:20:49.17 ID:4wvh7Cn2.net] >>815 合ってる
833 名前:デフォルトの名無しさん [2019/06/01(土) 16:55:01.52 ID:uuPo6pHP.net] nativeはまだ作成中みたいな感じなので瀕死とは違うと思うが
834 名前:デフォルトの名無しさん [2019/06/01(土) 17:46:40.68 ID:xELmXxSQ.net] Kotlinを勉強し始めたんだけどさあ これってレファレンスを見てエディタで打ち込む->kotlincでコンパイル=>javaで動かす・・・・ってのを繰り返さないとならんの? Swiftに言う「swift asdf.swift」みたいなのに相当するコマンドはないのかしら
835 名前:デフォルトの名無しさん [2019/06/01(土) 17:49:07.58 ID:FZbdo0L3.net] そうか。合ってるか。。 サーバーサイド kotlinが流行ってないのは何でなんだろ。 現状問題なく使えるように思うけど、ほとんど開発案件出てこないね。
836 名前:デフォルトの名無しさん mailto:sage [2019/06/01(土) 17:50:33.82 ID:v1/bDBif.net] >>822 IntelliJ(community版)を使おう 再生ボタン一つで済む