[過去ログ] Rust part24 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
685
(4): デフォルトの名無しさん [sage] 2024/07/09(火) 21:56:05.19 ID:sTXYSGuF(2/2) AAS
Rustのトレイトは優れているため
LSPに違反するコード例を作ることができないんだよ
もしRustに文句をつけたかったら
LSPに違反する二つの型のコード例を作って示してごらん
Rustで違反例を作るのは不可能だよ
686
(1): デフォルトの名無しさん [sage] 2024/07/09(火) 22:08:43.14 ID:ZNKPIxXk(2/3) AAS
>>685
Rustに文句をつけたいとかではなく
>>660
660(3): デフォルトの名無しさん [sage] 2024/07/08(月) 13:25:29.85 ID:QAb8fFud(2/2) AAS
継承の本当の問題は、LSPを満たさない部分型関係を作ってしまいがちということ
他の型の実装に依存するのが良くないというのはDIの話で、直接は関係ない
でLSPに言及された途端に実装継承とか言わなくなって「最初から自分はLSPを理由に継承のダメさを語ってましたけど」って態度でイキリ倒してるの(+結局理解してなさそうなの)がバカにされとるんやで
687: デフォルトの名無しさん [sage] 2024/07/09(火) 22:36:56.01 ID:YflJELWV(6/6) AAS
>>685
>>684
684(3): デフォルトの名無しさん [sage] 2024/07/09(火) 21:07:20.42 ID:YflJELWV(5/6) AAS
>>683
あるトレイトでpanic2を禁止しようとしました。事前条件(あるいは例外条件)でnopanicとしたかったけど、そんなのは無いのでとりあえずデフォルト実装でpanic禁止にしました。
しかしトレイトユーザーはそんなのお構い無しにunsafe rustでpanicを使います。ついにpanicが発生してシステムダウンしました。

LSPでケアしている問題はRustのTraitを使っている限り発生しないんじゃないんだっけ?
みたいに、
トレイトがpanicを禁止したいのに、ユーザーのトレイト実装がpanicを返す
というのはLSP違反だろ。
691
(7): デフォルトの名無しさん [] 2024/07/09(火) 22:57:23.83 ID:/lHavWP5(1) AAS
>>685
リスコフの置換原則は設計的な原則だから言語仕様で違反を防ぐことはできないぞ
悪名高い長方形・正方形の問題はトレイトがあっても起こり得る

trait Rectangle {
 fn set_width(&mut self, width: i32);
 fn set_height(&mut self, height: i32);
 fn width(&self) -> i32;
 fn height(&self) -> i32;
 fn area(&self) -> i32 { self.width() * self.height() }
}

struct Square { len: i32 }

impl Rectangle for Square {
 fn set_width(&mut self, width: i32) { self.len = width; }
 fn set_height(&mut self, height: i32) { self.len = width; }
 fn width(&self) -> i32 { self.len }
 fn height(&self) -> i32 { self.len }
}

fn func(x: &mut impl Rectangle) {
 x.set_width(3);
 x.set_height(4);

 // xが長方形であれば以下が成り立つはずだが、Square型を渡された場合に失敗する
 assert!(x.area() == 12);
}
695
(1): デフォルトの名無しさん [] 2024/07/09(火) 23:30:16.52 ID:KAvgjhF7(2/2) AAS
>2
2(4): デフォルトの名無しさん [sage] 2024/05/27(月) 06:42:29.23 ID:T4AFD1f4(2/3) AAS
Rust The Book (日本語版)
外部リンク:doc.rust-jp.rs
Rust edition guide (日本語版)
外部リンク:doc.rust-jp.rs
Rust by example (日本語版)
外部リンク:doc.rust-jp.rs
Rust cookbook (日本語版)
外部リンク:uma0317.github.io
Rust API guideline (日本語版)
外部リンク:sinkuu.github.io
Rust nomicon book (日本語版)
外部リンク:doc.rust-jp.rs
Rust async book (日本語版)
外部リンク:async-book-ja.netlify.app
Rust WASM book (日本語版)
外部リンク:moshg.github.io
Rust embeded book (日本語版)
外部リンク:tomoyuki-nakabayashi.github.io
Rust enbeded discovery (日本語版)
外部リンク:tomoyuki-nakabayashi.github.io
Rust Design Patterns (日本語版)
外部リンク:qiita.com
外部リンク:qiita.com
Rust API guideline (日本語版)
外部リンク:sinkuu.github.io
つの異なる長さを持つ(受け取る)機能を定義しているのならば
>正方形はその実装型にはなりえません
論理的にはそう
でも実際にそういうコードを書けばビルドは通る

>>685
>LSPに違反する二つの型のコード例を作って示してごらん
>Rustで違反例を作るのは不可能だよ
とあったので、これはその反例として示した
このような問題は設計の問題であり、まずい設計をする人が使えばRustでも問題は起こり得るということを言いたい
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 2.856s*