@KamilAdam: Nie znam Rusta. Natomiast w językach, które nie wspierają OOP, nie możesz mieć wszystkiego. Takie SRP oryginalnie oznacza, że klasa ma mieć pojedynczą odpowiedzialność / powód do zmiany.
Czyli w Ruscie nie można pisać SOLID bo Rust ma traity i implementacje traitów, ale jakby przemianować słowo kluczowe z impl
na class
to już by można było pisać SOLID?
Czyli ten kod nie jest SOLID:
pub trait Summary {
fn summarize(&self) -> String;
}
pub struct NewsArticle {
pub headline: String,
pub location: String,
pub author: String,
pub content: String,
}
impl Summary for NewsArticle {
fn summarize(&self) -> String {
format!("{}, by {} ({})", self.headline, self.author, self.location)
}
}
ale jakby istniał hipotetyczny język SolidRust używający słowa kluczowego class
zamiast impl
to ten kod byłby SOLID
pub trait Summary {
fn summarize(&self) -> String;
}
pub struct NewsArticle {
pub headline: String,
pub location: String,
pub author: String,
pub content: String,
}
class Summary for NewsArticle {
fn summarize(&self) -> String {
format!("{}, by {} ({})", self.headline, self.author, self.location)
}
}
to ciesze się że sobie to wyjaśniliśmy :D
Teraz już wiem że w Haskellu można pisać SOLID bo ma klasy:
-- interfejs czyli TypeClassa
class Functor f where
fmap :: (a -> b) -> f a -> f b
-- implementacja czyli instancja TypeClassy
instance Functor Tree where
fmap f (Leaf x) = Leaf (f x)
fmap f (Branch t1 t2) = Branch (fmap f t1) (fmap f t2)
:P