公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
公式ドキュメント
https://www.rust-lang.org/learn
Web上の実行環境
https://play.rust-lang.org
※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust
※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※次スレは原則>>980が立てること
前スレ
Rust part18
https://mevius.5ch.net/test/read.cgi/tech/1670663822/
探検
Rust part19
■ このスレッドは過去ログ倉庫に格納されています
2023/01/17(火) 12:41:32.25ID:nikBFIMQ
410デフォルトの名無しさん
2023/02/07(火) 20:09:18.77ID:RZZKb5qe >>409
こういうバカが一人でも入ってくると現場は苦労するわな
こういうバカが一人でも入ってくると現場は苦労するわな
411デフォルトの名無しさん
2023/02/07(火) 22:03:06.31ID:u8XyY9YO 今回のケースはRustのエラー処理を他の言語(C#あたり)の例外処理に寄せようとしてる感じ
「特定の例外クラスをcatchしたい」→「dyn Errorで投げてダウンキャストで分岐すればいい」みたいな
anyhowはそういう人のためにあるのかもしれない
オブジェクト指向言語専攻の人はRustのtraitを基底クラスの代わりに使いがちだよね
is-a継承はRustだとenumで表現できる場合が多いんだけど切り替えが難しいのかも
「特定の例外クラスをcatchしたい」→「dyn Errorで投げてダウンキャストで分岐すればいい」みたいな
anyhowはそういう人のためにあるのかもしれない
オブジェクト指向言語専攻の人はRustのtraitを基底クラスの代わりに使いがちだよね
is-a継承はRustだとenumで表現できる場合が多いんだけど切り替えが難しいのかも
412デフォルトの名無しさん
2023/02/07(火) 22:27:27.04ID:23ICgzsB 単純にエラーの種類を列挙する意味がないときに使うだけやで
413デフォルトの名無しさん
2023/02/07(火) 23:09:28.73ID:u8XyY9YO それならいいんだけど型キャストしてまで分岐するとか言ってる人がいたから
自分で分岐する範囲くらいは自分で列挙しとけって話
自分で分岐する範囲くらいは自分で列挙しとけって話
414デフォルトの名無しさん
2023/02/07(火) 23:53:31.04ID:23ICgzsB 下層から上がってくる99種類のエラーはログ吐かせるだけで、特別な処理したいエラーはひとつしかないのにいちいちenumに詰め直したりせんわな
415デフォルトの名無しさん
2023/02/08(水) 00:04:28.76ID:mV68xos2 逆
自分で分岐してエラー処理すんなら区別すべきエラーを決めるのは自分なのでanyhowやdyn Errorでダウンキャストしても問題ない
外から呼び出されるコードなら区別して処理するエラーを決めるのは呼び出し側なので区別できるようにenumで書く
自分で分岐してエラー処理すんなら区別すべきエラーを決めるのは自分なのでanyhowやdyn Errorでダウンキャストしても問題ない
外から呼び出されるコードなら区別して処理するエラーを決めるのは呼び出し側なので区別できるようにenumで書く
416デフォルトの名無しさん
2023/02/08(水) 00:35:28.79ID:ydIblX/+ すまんが、これってなんでダメなの?
ブロックの最後に式を書いてるのに、なんでreturnって書かないとリターンしないの???
そもそもエラーの内容に書いてあるmismatched typesって、一体何と何のタイプがミスマッチなんなんだ・・・・
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=d1833710038ed821593015e5382de11f
エロい人教えて!!!
ブロックの最後に式を書いてるのに、なんでreturnって書かないとリターンしないの???
そもそもエラーの内容に書いてあるmismatched typesって、一体何と何のタイプがミスマッチなんなんだ・・・・
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=d1833710038ed821593015e5382de11f
エロい人教えて!!!
417デフォルトの名無しさん
2023/02/08(水) 01:51:02.48ID:U3de6tMw418デフォルトの名無しさん
2023/02/08(水) 01:59:22.59ID:W8WwzKcT419デフォルトの名無しさん
2023/02/08(水) 07:28:48.49ID:2c2bFNHO 上位の関数でもかなり多数のケースに分けてエラー処理する必要な場合だと
個別にenumにエラー型を収容する方が有利なケースもある
もちろんその場合でもanyhowやdyn Errorに収容してダウンキャストしてもよい
enum matchとダウンキャストの実行時コストはほぼ同じで優劣はなく視認性も変わらない
enumを使うとコードが増える問題はあるがあとは好みの問題
個別にenumにエラー型を収容する方が有利なケースもある
もちろんその場合でもanyhowやdyn Errorに収容してダウンキャストしてもよい
enum matchとダウンキャストの実行時コストはほぼ同じで優劣はなく視認性も変わらない
enumを使うとコードが増える問題はあるがあとは好みの問題
420デフォルトの名無しさん
2023/02/08(水) 10:45:01.05ID:ENpYrX9l ダウンキャストは下位モジュールに不必要に依存することになるので選択の余地があるなら基本的には使うべきではない
自crateで定義したエラー型にダウンキャストするくらいならエラーを定義するついでにenum書いとけばいいだけ
他crateで定義したエラー型にダウンキャストしてるとバージョンアップ時にサイレントにキャストが失敗して動作が変わる
あくまで非常口であって使わざるをえないときはマイナス面を理解した上で注意深く使うもの
自crateで定義したエラー型にダウンキャストするくらいならエラーを定義するついでにenum書いとけばいいだけ
他crateで定義したエラー型にダウンキャストしてるとバージョンアップ時にサイレントにキャストが失敗して動作が変わる
あくまで非常口であって使わざるをえないときはマイナス面を理解した上で注意深く使うもの
421デフォルトの名無しさん
2023/02/08(水) 10:52:13.58ID:fJPPomwd UnknownErrorにわざわざ詰め直したログ吐くしかできない99種類あったエラーと1種類の自クレートのMyErrorをenumで2つ列挙して分岐するのと
MyErrorも含めて100種全部dynで上げてMyErrorだけダウンキャストすることの間に大した違いはない
MyErrorも含めて100種全部dynで上げてMyErrorだけダウンキャストすることの間に大した違いはない
422デフォルトの名無しさん
2023/02/08(水) 12:29:34.73ID:/lg+THEr アプリケーション開発とライブラリ開発の2つの視点があって、それぞれで戦略が違うというのが大元にあるからそこは理解してもらわないとね。
423デフォルトの名無しさん
2023/02/08(水) 12:40:19.14ID:TursxKDi ライブラリでdyn Error使うと本体の型がpubじゃないときにめんどくさそう
424デフォルトの名無しさん
2023/02/08(水) 12:45:18.46ID:QfEWSkwW 両者で大きく異なるよね
ただし既出のcargoやreqwestなど違いに関わらずダウンキャストを使っているコードも多いから
どっちだと良くてどっちだとダメというものでもない気がする
ただし既出のcargoやreqwestなど違いに関わらずダウンキャストを使っているコードも多いから
どっちだと良くてどっちだとダメというものでもない気がする
425デフォルトの名無しさん
2023/02/08(水) 12:48:39.58ID:QfEWSkwW426デフォルトの名無しさん
2023/02/08(水) 13:05:56.18ID:B9DUhvwN >>421
どういう種類の変更に対してコードのどの部分に手を入れる必要が出てくるのかを考えてみるといいよ
どういう種類の変更に対してコードのどの部分に手を入れる必要が出てくるのかを考えてみるといいよ
427デフォルトの名無しさん
2023/02/08(水) 13:15:25.12ID:Fgr/3fzw 求められてもない具体性のない中身のない全く役に立たないアドバイスは有害でしかない
428デフォルトの名無しさん
2023/02/08(水) 13:35:42.99ID:DnIJ53A+ 現実にdowncast_ref()が使われているアプリやライブラリが多数あり
それらが問題になったことはないのだから
downcast_ref()を嫌っている人は思い込みで好き嫌いに過ぎないことを理解しようぜ
enumを作っても下位のエラー型を突っ込むだけでは何も変わらない
それらが問題になったことはないのだから
downcast_ref()を嫌っている人は思い込みで好き嫌いに過ぎないことを理解しようぜ
enumを作っても下位のエラー型を突っ込むだけでは何も変わらない
429デフォルトの名無しさん
2023/02/08(水) 14:12:14.99ID:SqObziFu ここまで具体的なコード例なし
430デフォルトの名無しさん
2023/02/08(水) 14:40:13.85ID:J3DHyZUt 前提条件付けて場合分けして考えろ
てかこんなことでスレの半分近くも消費すんな
てかこんなことでスレの半分近くも消費すんな
431デフォルトの名無しさん
2023/02/08(水) 16:15:41.93ID:ydIblX/+432デフォルトの名無しさん
2023/02/08(水) 16:16:54.39ID:VvFQM19K433デフォルトの名無しさん
2023/02/08(水) 17:13:58.11ID:e6ub/0SO たぶんだけど「Rustでは値を返すのにreturnを省略できる」と誤解してるんじゃないかな
その誤解のためreturn bのreturnを省略してしまったと思われる
正しくは「Rustでは最後の値が返り値となる(のでreturnが不要)(だが使ってもよい)」
と「途中で返したい時はreturnを使う」
だから今回の例だと
if文の中では『途中だから』return bとbにreturnが必須
あるいは関数の最後をif-else式にしてしまえば『最後となるから』bにreturnは不要
その誤解のためreturn bのreturnを省略してしまったと思われる
正しくは「Rustでは最後の値が返り値となる(のでreturnが不要)(だが使ってもよい)」
と「途中で返したい時はreturnを使う」
だから今回の例だと
if文の中では『途中だから』return bとbにreturnが必須
あるいは関数の最後をif-else式にしてしまえば『最後となるから』bにreturnは不要
434デフォルトの名無しさん
2023/02/08(水) 17:28:24.72ID:e6ub/0SO ちょっと誤解があるから追加
最後をif-else式にすれば全体に式returnのreturnが不要になる
そしてif-else式の中はreturnは不要というか付けない
そこにreturnを付けるとif-else式ではなぬif-else文になる
最後をif-else式にすれば全体に式returnのreturnが不要になる
そしてif-else式の中はreturnは不要というか付けない
そこにreturnを付けるとif-else式ではなぬif-else文になる
435デフォルトの名無しさん
2023/02/08(水) 18:12:57.92ID:uJD0QVJP 文章を難読化しすぎやろw
436デフォルトの名無しさん
2023/02/08(水) 18:22:49.80ID:KYgqZ0R0 面倒だから戻るところはすべてreturn書いてる
437デフォルトの名無しさん
2023/02/08(水) 20:39:29.96ID:EOwXjjdD return式の型は厳密には!なんだけど……
まあ後で知ればいいか
まあ後で知ればいいか
438デフォルトの名無しさん
2023/02/08(水) 20:50:18.79ID:e6ub/0SO そのおかげでif式でreturnしつつelseで値を与えたりできるね
439デフォルトの名無しさん
2023/02/09(木) 11:57:24.62ID:w55r8U1C 早期returnはバグにつながるから禁止が常識
440デフォルトの名無しさん
2023/02/09(木) 12:14:59.38ID:bVNNfLSa >>439
昔はそう言われたけど今はそんなカス風習廃れたしRustに持ち込まないでほしい。
昔はそう言われたけど今はそんなカス風習廃れたしRustに持ち込まないでほしい。
441デフォルトの名無しさん
2023/02/09(木) 12:15:50.03ID:UhaInviD 早期returnは(>>439みたいなアホが使うと)バグにつながるから禁止が常識
442デフォルトの名無しさん
2023/02/09(木) 12:41:16.10ID:S7fEOBGh わざわざ早期リターンのために?演算子なんて用意してるRustで早期リターン禁止とな?!
443デフォルトの名無しさん
2023/02/09(木) 12:43:02.37ID:EmRyIpwb スルースキル皆無か
444デフォルトの名無しさん
2023/02/09(木) 13:10:12.86ID:wPt4Q+MY なんで昔は早期returnがバグにつながると考えられてたの?
どう考えても早期returnしない方がバグにつながりやすいと思うんだが
どう考えても早期returnしない方がバグにつながりやすいと思うんだが
445デフォルトの名無しさん
2023/02/09(木) 14:20:08.85ID:QqGr+Vdk もっと昔にgotoの使いすぎで制御構造がぐちゃぐちゃになったことへの反動で
複雑な制御構造は使わないようにしよう、という流れだったかと
複雑な制御構造は使わないようにしよう、という流れだったかと
446デフォルトの名無しさん
2023/02/09(木) 14:55:47.47ID:UhaInviD >>444
C言語時代の話な
例えばこういうパターンでメモリーリークしたりするバグがたくさんあった
f(...){
p = malloc(...);
...
if(...) return;
...
free(p);
}
C言語時代の話な
例えばこういうパターンでメモリーリークしたりするバグがたくさんあった
f(...){
p = malloc(...);
...
if(...) return;
...
free(p);
}
447デフォルトの名無しさん
2023/02/09(木) 15:21:57.59ID:9WtqRr2n そのあたりも自動メモリ開放のRustなら大丈夫だね
if文で早期return/continue/breakしないと、どんどんifネストが深くなっていくのでそれを避けたい
if文で早期return/continue/breakしないと、どんどんifネストが深くなっていくのでそれを避けたい
448デフォルトの名無しさん
2023/02/09(木) 15:37:28.09ID:Ktnp537B >>446
リソース確保・解放するレイヤーとそれを使って処理を行うレイヤーを分ければよくない?
f(...){
p = malloc(...);
g(p, …);
free(p);
}
g(…) {
...
if(...) return;
...
}
ifのネストが浅くなっても逆に関数のネストが深くなりすぎて読みにくくなる側面があるということなのかな?
リソース確保・解放するレイヤーとそれを使って処理を行うレイヤーを分ければよくない?
f(...){
p = malloc(...);
g(p, …);
free(p);
}
g(…) {
...
if(...) return;
...
}
ifのネストが浅くなっても逆に関数のネストが深くなりすぎて読みにくくなる側面があるということなのかな?
449デフォルトの名無しさん
2023/02/09(木) 15:51:48.67ID:oQtbOpVY450デフォルトの名無しさん
2023/02/09(木) 15:59:20.91ID:Ieoj7bJI RAII無しでの話なんかRustに関係無いだろ。
451デフォルトの名無しさん
2023/02/09(木) 16:04:18.76ID:1694Wm1I ifがネスとしていたりした場合に、returnみたいにif-expressionの方に結果を返したい時ってどうすればいいの?
452デフォルトの名無しさん
2023/02/09(木) 16:22:54.26ID:eQhq+cyr >>449
早期returnはやめましょうルールは完璧に守られる保証があると?
早期returnはやめましょうルールは完璧に守られる保証があると?
453デフォルトの名無しさん
2023/02/09(木) 16:24:27.43ID:g7YoScpU454デフォルトの名無しさん
2023/02/09(木) 16:25:56.79ID:VnFQyKoO455デフォルトの名無しさん
2023/02/09(木) 16:36:32.32ID:8ktpZl0b 言語仕様的に可能でも規則で縛ることで安全を担保しようという方法は
いずれ失敗するからそういう要素は必ず言語側の仕様で保証すべき、というのがRustの思想なんだから
「あれは危険だから駄目、コーディング規則で縛る」という発想自体が間違ってる
いずれ失敗するからそういう要素は必ず言語側の仕様で保証すべき、というのがRustの思想なんだから
「あれは危険だから駄目、コーディング規則で縛る」という発想自体が間違ってる
456デフォルトの名無しさん
2023/02/09(木) 16:43:33.27ID:UhaInviD457デフォルトの名無しさん
2023/02/09(木) 16:44:45.59ID:UhaInviD458デフォルトの名無しさん
2023/02/09(木) 16:48:27.59ID:jx1YaHu3459デフォルトの名無しさん
2023/02/09(木) 16:49:18.29ID:9WtqRr2n こういうやつ?
let result = 'found: {
for i in 0..100 {
if f(i) {
break 'found Some(i);
}
}
None
};
let result = 'found: {
for i in 0..100 {
if f(i) {
break 'found Some(i);
}
}
None
};
461デフォルトの名無しさん
2023/02/09(木) 17:27:44.71ID:vSSl5weC 最近はCでもcleanup属性というのが使えるんだな
462はちみつ餃子 ◆8X2XSCHEME
2023/02/09(木) 17:43:07.29ID:zt0qN6wf >>444
構造化が重要視された時代がある。
順次・反復・分岐によって処理の流れを構築するという点から見ると
早期リターンは流れをすっとばして大ジャンプしてることになるので
コードを追うのを難しくすると考えられていた。
「出入口はひとつずつ」は基本思想だったんだよ。
構造化が不十分だった時代にまず構造化することが大事だったという話。
今では構造化が当たり前になったから次の段階として順次・反復・分岐という構造だけでは
上手く扱いづらい部分をどうやるのがいいのかという模索が続いてるわけ。
構造化が重要視された時代がある。
順次・反復・分岐によって処理の流れを構築するという点から見ると
早期リターンは流れをすっとばして大ジャンプしてることになるので
コードを追うのを難しくすると考えられていた。
「出入口はひとつずつ」は基本思想だったんだよ。
構造化が不十分だった時代にまず構造化することが大事だったという話。
今では構造化が当たり前になったから次の段階として順次・反復・分岐という構造だけでは
上手く扱いづらい部分をどうやるのがいいのかという模索が続いてるわけ。
463デフォルトの名無しさん
2023/02/09(木) 18:03:17.12ID:9WtqRr2n 戻るgotoは結局なんらかのループを表しているので
Rustならラベル付loopに指定continueで表せる
進むgotoは無制限ではなくラベル指定breakの大域脱出型に制限される
という認識で合ってる?
Rustならラベル付loopに指定continueで表せる
進むgotoは無制限ではなくラベル指定breakの大域脱出型に制限される
という認識で合ってる?
464デフォルトの名無しさん
2023/02/09(木) 18:18:38.11ID:xZSrodqJ >>454
なんか微妙な機能だな
関数化して早期returnさせる手間が嫌ということなんだろうけどそれなら||や&&オペレータをOptionやResult用に上書きできるようにした方がずっと使いやすい
tryブロックとの非対称性も気になる
なんか微妙な機能だな
関数化して早期returnさせる手間が嫌ということなんだろうけどそれなら||や&&オペレータをOptionやResult用に上書きできるようにした方がずっと使いやすい
tryブロックとの非対称性も気になる
465デフォルトの名無しさん
2023/02/09(木) 18:30:28.03ID:9WtqRr2n >>464
今までに既にあった機能のラベル付loop式のラベル指定breakという使われ方のうち
ループしない使われ方が多かったため事実上のシンタックスシュガーが導入されただけだよ
だから微妙な機能が追加されたという見方は正しくない
今までに既にあった機能のラベル付loop式のラベル指定breakという使われ方のうち
ループしない使われ方が多かったため事実上のシンタックスシュガーが導入されただけだよ
だから微妙な機能が追加されたという見方は正しくない
466デフォルトの名無しさん
2023/02/09(木) 18:30:33.67ID:QonGkYb5 >>464
ほとんどの場合はこんなん使う前にその部分を関数に切り出すことを考えるべきというのはめちゃくちゃ言われてる
awaitとかResultとかライフタイムとかいろいろ絡んできたときに再利用もされない数行の処理のために長々と型を書かなくても済むのがユースケースのひとつと思われる
ほとんどの場合はこんなん使う前にその部分を関数に切り出すことを考えるべきというのはめちゃくちゃ言われてる
awaitとかResultとかライフタイムとかいろいろ絡んできたときに再利用もされない数行の処理のために長々と型を書かなくても済むのがユースケースのひとつと思われる
467デフォルトの名無しさん
2023/02/09(木) 18:46:56.04ID:RAzSpXh0468デフォルトの名無しさん
2023/02/09(木) 18:50:34.43ID:hFEBZw9k どうせなら仮変数みたいな変数割当機能も用意して、末尾最適化再帰風ループもできるようにならないかね。
469デフォルトの名無しさん
2023/02/09(木) 18:53:10.62ID:9WtqRr2n >>467
既に昔から存在していたloop式を
loopと書かなくてもよくなっただけだよ
今までは皆はloop式の最後をbreakすることでloopさせずにこの同じ機能を使っていた
今回でloopを省けるようになったため最後のbreakが不要とだけにすぎない
今さら文句をつけるのが不思議
既に昔から存在していたloop式を
loopと書かなくてもよくなっただけだよ
今までは皆はloop式の最後をbreakすることでloopさせずにこの同じ機能を使っていた
今回でloopを省けるようになったため最後のbreakが不要とだけにすぎない
今さら文句をつけるのが不思議
470デフォルトの名無しさん
2023/02/09(木) 19:02:26.27ID:o9a7e9s5 早期returnってファウラーのガード節の話じゃないん?
あの使い方する限り安全安心可読性改良にしかならないよな?
あの使い方する限り安全安心可読性改良にしかならないよな?
471デフォルトの名無しさん
2023/02/09(木) 19:04:01.20ID:EmRyIpwb >>470
ファウラーじゃなくてリーダブルコード?
ファウラーじゃなくてリーダブルコード?
472デフォルトの名無しさん
2023/02/09(木) 19:05:50.10ID:o9a7e9s5 リーダブルコードは忘れたけど
part of martinfowler.com
https://refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html
part of martinfowler.com
https://refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html
473デフォルトの名無しさん
2023/02/09(木) 19:15:02.58ID:9WtqRr2n if letでネストが深くならないように早期return等しようとすると無駄コードが膨らんでいた問題も
同時に導入されたlet elseによって解決されたね
同時に導入されたlet elseによって解決されたね
474デフォルトの名無しさん
2023/02/09(木) 19:24:14.80ID:EmRyIpwb475デフォルトの名無しさん
2023/02/09(木) 19:31:22.46ID:Kxe1JjXm 「ルールだからダメ(思考停止)」な人って結構いるよね
476デフォルトの名無しさん
2023/02/09(木) 19:40:55.17ID:rpwFU8e5 ルールの背景を考えずに破ろうとするやつも多いけどな。
守破離は基本だろ。ブルースリーのパンチキックの逸話でもいいけど。
守破離は基本だろ。ブルースリーのパンチキックの逸話でもいいけど。
477デフォルトの名無しさん
2023/02/09(木) 19:47:18.19ID:Kxe1JjXm478デフォルトの名無しさん
2023/02/09(木) 19:54:21.56ID:bVNNfLSa そもそも失敗できなくするのがここ10年ぐらいのトレンドだろ。
だから静的型やRustが支持されるわけで。
だから静的型やRustが支持されるわけで。
479デフォルトの名無しさん
2023/02/09(木) 20:07:33.02ID:rpwFU8e5480デフォルトの名無しさん
2023/02/09(木) 20:20:31.75ID:9WtqRr2n Rustの制御構文としては
昨年末の2つの追加で
従来は不便で需要が多かった形が無事に解決したから一段落かな
昨年末の2つの追加で
従来は不便で需要が多かった形が無事に解決したから一段落かな
481デフォルトの名無しさん
2023/02/09(木) 22:05:48.35ID:nhsBAAgr482デフォルトの名無しさん
2023/02/09(木) 22:51:32.40ID:YnVskMRN こういうの書くやつが出るから
基本は使わないほうがよさそうだな
https://github.com/rust-lang/rust/issues/48594/partials/load_more#issuecomment-1184213006
基本は使わないほうがよさそうだな
https://github.com/rust-lang/rust/issues/48594/partials/load_more#issuecomment-1184213006
483デフォルトの名無しさん
2023/02/09(木) 23:06:57.24ID:QonGkYb5 草
何らかの目的で大域脱出を用意すると必ず妙ちくりんな悪用を考える奴が出てくるんだよな
何らかの目的で大域脱出を用意すると必ず妙ちくりんな悪用を考える奴が出てくるんだよな
484はちみつ餃子 ◆8X2XSCHEME
2023/02/09(木) 23:22:20.06ID:zt0qN6wf そういえばコンテナのイテレーションの順序が未規定なときに
順序に依存したコードを書かないように乱数でわざとデタラメな順序にしたら
乱数生成器として使うやつが出てきたって話があったな。
どんな機能も下手に使ったら無茶苦茶にしうるってのはもうどうしようもなくない?
順序に依存したコードを書かないように乱数でわざとデタラメな順序にしたら
乱数生成器として使うやつが出てきたって話があったな。
どんな機能も下手に使ったら無茶苦茶にしうるってのはもうどうしようもなくない?
485デフォルトの名無しさん
2023/02/09(木) 23:42:25.26ID:iUuqvbE0 >>56のが実現したらRFCの例は||で代替可
let result = (first_container.iter().find(|&&v| v > 0)
|| second_container.iter().find(|&&v| v < 0))
.unwrap_or(&0);
labelやbreakの手続き的なやり方よりこっちの方が汎用性も高いしrustの目指すべき方向に合ってると思う
let result = (first_container.iter().find(|&&v| v > 0)
|| second_container.iter().find(|&&v| v < 0))
.unwrap_or(&0);
labelやbreakの手続き的なやり方よりこっちの方が汎用性も高いしrustの目指すべき方向に合ってると思う
486デフォルトの名無しさん
2023/02/10(金) 01:49:50.47ID:JoKDyp+E メソッド抽出は嫌
クロージャの即時実行も嫌
ラベル付きbreakならOK!
って感覚が俺には理解できんが
ニーズがあるならいいんじゃね
クロージャの即時実行も嫌
ラベル付きbreakならOK!
って感覚が俺には理解できんが
ニーズがあるならいいんじゃね
487デフォルトの名無しさん
2023/02/10(金) 02:22:12.82ID:KiCBMwJT488デフォルトの名無しさん
2023/02/10(金) 02:35:52.13ID:8y57Q10t ラベルでジャンプより、関数の入れ子の方が分かりやすくない?
489デフォルトの名無しさん
2023/02/10(金) 03:36:08.11ID:eoPLVAGF490デフォルトの名無しさん
2023/02/10(金) 06:59:25.26ID:Fpp4vOr0491デフォルトの名無しさん
2023/02/10(金) 07:32:00.75ID:Fpp4vOr0 そしてRustがなぜ今回の構文の形を採用したか
・returnでもbreakでも多重になった時にどれを終えるのか曖昧になるため何らかの指定は必要
・ラベルによる指定はRustの他の構文でも共通に既に使われており親和性がある
・returnの使用は混乱を防ぐために関数とクロージャーから返る位置付けのみに保ちたい
・既存のloop式と今回の構文はloopキーワードを除けば全く同じであり導入前はloop式で代替されていた
・returnでもbreakでも多重になった時にどれを終えるのか曖昧になるため何らかの指定は必要
・ラベルによる指定はRustの他の構文でも共通に既に使われており親和性がある
・returnの使用は混乱を防ぐために関数とクロージャーから返る位置付けのみに保ちたい
・既存のloop式と今回の構文はloopキーワードを除けば全く同じであり導入前はloop式で代替されていた
492デフォルトの名無しさん
2023/02/10(金) 07:54:41.21ID:Fpp4vOr0 >>488
必要性に応じて関数として切り出すのも構わない
そして関数として分離した方が好ましい場合もあるだろう
しかし常に関数切り出しを強いられる言語だったとしたら煩雑すぎて機能不足と言えるから使い分けできることが必要
必要性に応じて関数として切り出すのも構わない
そして関数として分離した方が好ましい場合もあるだろう
しかし常に関数切り出しを強いられる言語だったとしたら煩雑すぎて機能不足と言えるから使い分けできることが必要
493デフォルトの名無しさん
2023/02/10(金) 08:05:40.53ID:nOIBi0US >>490
文脈読めなさ過ぎw
文脈読めなさ過ぎw
494デフォルトの名無しさん
2023/02/10(金) 08:18:49.59ID:Fpp4vOr0 >>493
従来からforやloop式で使われてきた早期return(離脱)つまりRustでのラベル指定break
そして今回Rust導入されたブロック式での早期return(離脱)つまり同様に構文としてはラベル指定break
それらに対して「ラベルでジャンプ」とは何を言いたいのか?
従来からforやloop式で使われてきた早期return(離脱)つまりRustでのラベル指定break
そして今回Rust導入されたブロック式での早期return(離脱)つまり同様に構文としてはラベル指定break
それらに対して「ラベルでジャンプ」とは何を言いたいのか?
495デフォルトの名無しさん
2023/02/10(金) 08:34:37.12ID:wb0Nj+xg >>485
短絡orに論理orを使うのは混乱の元だから、別の専用の記号を用意して欲しいわ。
短絡orに論理orを使うのは混乱の元だから、別の専用の記号を用意して欲しいわ。
496デフォルトの名無しさん
2023/02/10(金) 08:39:40.06ID:Fpp4vOr0497デフォルトの名無しさん
2023/02/10(金) 08:41:20.86ID:KiCBMwJT498デフォルトの名無しさん
2023/02/10(金) 08:50:58.78ID:Fpp4vOr0 関数切り出しすると
その中でも継続して使う変数(値)を参照として全て渡してそれらの型宣言も改めて行なってと煩雑さとコードの重複が大きい
もちろん返り値型も型推論で済まなくなり明確に宣言しなければならなくなる
したがって関数切り出しの方が明確にメリットが上回るケースを除いて
適材適所でブロック式で済ませられるようになった今回の導入は大きな意義があると思う
その中でも継続して使う変数(値)を参照として全て渡してそれらの型宣言も改めて行なってと煩雑さとコードの重複が大きい
もちろん返り値型も型推論で済まなくなり明確に宣言しなければならなくなる
したがって関数切り出しの方が明確にメリットが上回るケースを除いて
適材適所でブロック式で済ませられるようになった今回の導入は大きな意義があると思う
499デフォルトの名無しさん
2023/02/10(金) 09:14:00.68ID:8y57Q10t 関数切り出しじゃなくて、関数のネスト
500デフォルトの名無しさん
2023/02/10(金) 09:39:52.23ID:FTCkglUc501デフォルトの名無しさん
2023/02/10(金) 09:47:31.36ID:XC30Ey72502デフォルトの名無しさん
2023/02/10(金) 09:58:49.88ID:zTpuYOFQ 5年もの歳月を費やしてstabilizeするほど意味ある機能じゃないよな
超ニッチなnice to haveなんだからこんな機能実装するくらいなら他の作業してくれよ
超ニッチなnice to haveなんだからこんな機能実装するくらいなら他の作業してくれよ
503デフォルトの名無しさん
2023/02/10(金) 09:58:58.37ID:f/xkkyji504デフォルトの名無しさん
2023/02/10(金) 10:00:29.07ID:76BGvvFm505デフォルトの名無しさん
2023/02/10(金) 10:06:08.19ID:f/xkkyji >>500
forやloopを使ったときにどのbreakか区別できるようにラベルが付いてるだけでラベル付ブロック式のネストまでは元々求められていないんじゃないかな
たまたまラベル付となったからネストさせて指定して抜けることも可能なのかも知れないけどさ
forやloopを使ったときにどのbreakか区別できるようにラベルが付いてるだけでラベル付ブロック式のネストまでは元々求められていないんじゃないかな
たまたまラベル付となったからネストさせて指定して抜けることも可能なのかも知れないけどさ
506デフォルトの名無しさん
2023/02/10(金) 11:35:14.97ID:D7CjmUqS >>505
指定したラベル位置に制御を移すような動きのことを一般的にはジャンプと呼ぶ
ラベルで指定したブロックを”抜ける”と呼ぶ感覚ももちろん理解できるが同じようにジャンプと呼ぶ感覚くらいは理解してやれって話
指定したラベル位置に制御を移すような動きのことを一般的にはジャンプと呼ぶ
ラベルで指定したブロックを”抜ける”と呼ぶ感覚ももちろん理解できるが同じようにジャンプと呼ぶ感覚くらいは理解してやれって話
507デフォルトの名無しさん
2023/02/10(金) 12:14:15.40ID:53cyCMdn >>502
ブロック式の早期離脱機能は同時に導入されたlet elseと並んでRustにとって必須の機能
これまではブロック式で早期離脱が出来なかったため代替処置として
・ブロックの代わりにわざわざクロージャを用意して即時実行する
・ループさせないのにloop式を目的外でブロック式として用いる
・関数として切り出して引数型や戻り型などコードが無駄に膨らむ
以上3通りの方法が苦しい回避処置として取られてきた
この問題が一気に解決した
ブロック式の早期離脱機能は同時に導入されたlet elseと並んでRustにとって必須の機能
これまではブロック式で早期離脱が出来なかったため代替処置として
・ブロックの代わりにわざわざクロージャを用意して即時実行する
・ループさせないのにloop式を目的外でブロック式として用いる
・関数として切り出して引数型や戻り型などコードが無駄に膨らむ
以上3通りの方法が苦しい回避処置として取られてきた
この問題が一気に解決した
508デフォルトの名無しさん
2023/02/10(金) 13:14:46.92ID:OY+cHUF0509デフォルトの名無しさん
2023/02/10(金) 13:40:49.41ID:icbsua9B オジさんは即時実行マンセー派だったのに宗旨替えしたのかw
と言っても忌み嫌われてた即時実行から半歩前進して半歩後退してるみたいなので実質進歩してないな
と言っても忌み嫌われてた即時実行から半歩前進して半歩後退してるみたいなので実質進歩してないな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 ★3 [蚤の市★]
- 元プロ野球選手・堂上隼人(43)を20代女性2人へのわいせつ未遂容疑で8回目の逮捕…これまでの被害者は10代・20代の女性11人に [Anonymous★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 ★4 [蚤の市★]
- 【高校野球】なぜ『7回制』は反対多数でも止まらないか… 高野連が「全員の命」守るために貫く伝統より改革の姿勢 [冬月記者★]
- JAが"政府の備蓄米買い上げ"見越して価格下げず!?「古いコメは食用向きでないなどと理由をつけ...」専門家解説 [煮卵★]
- 【テレビ】石破前首相 中国レーダー照射「フェーズ上がってる」と指摘も「日本の世論が激高するのは避ける必要が…」 [少考さん★]
- 統一教会っていらない田んぼ畑ビルディング(アスベスト)も引き取ってくれるの? [358382861]
- 【高市悲報】自衛隊「実は事前に現場海域で中国軍から空母での発着訓練をすると通告がありました」え…?😨 [931948549]
- 【悲報】山里亮太(南海キャンディーズ)さん [329329848]
- 【高市悲報】日本が🇨🇳輸出規制したフォトレジスト、早速韓国企業が中国に売り込みかけて日本の対抗手段もうなくなるwww [709039863]
- 中国父「日本の一般大衆は高市を支持しておらず、反対している人も多い。悪いのは日本国民ではなく高市!」 すまんこれほんと? [271912485]
- 高市「中国さんお願い電話で話そ、このままじゃ武力衝突になっちゃう😭」日中間の専用電話に日本側からかけるも無視される [931948549]
