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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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
685(4): デフォルトの名無しさん [sage] 2024/07/09(火) 21:56:05.19 ID:sTXYSGuF(2/2) AAS
Rustのトレイトは優れているため
LSPに違反するコード例を作ることができないんだよ
もしRustに文句をつけたかったら
LSPに違反する二つの型のコード例を作って示してごらん
Rustで違反例を作るのは不可能だよ

>LSPに違反する二つの型のコード例を作って示してごらん
>Rustで違反例を作るのは不可能だよ
とあったので、これはその反例として示した
このような問題は設計の問題であり、まずい設計をする人が使えばRustでも問題は起こり得るということを言いたい
697: デフォルトの名無しさん [sage] 2024/07/09(火) 23:40:48.87 ID:h2DmPYHm(2/2) AAS
>>695
LSPに違反する二つの型はis-aの関係を持つsupertypeとsubtypeでなければならない
>>691
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);
}
はhas-aの関係なのでLSPに違反する二つの型のコード例とはなっていない
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.044s