W tym ćwiczeniu zajmiemy się tworzeniem sklepu z kosmetykami. Stwórz klasę Product, która będzie naszym wizażowym produktem. Jak na razie produkt będzie posiadał tylko nazwę, name: String.
case class Product(name: String)
Stwórz przykładowy produkt.
val myFavoriteProduct = Product("Super kosmetyk roku 2014")
Każdy produkt ma cenę, dodaj właśność price: Double do klasy Product i stwórz produkt z jakąś ceną. Uwaga: kiedy dodasz nową właśność do klasy, powyżej zdefiniowany myFavoriteProduct będzie błędny, dlatego że nie ma ceny tylko samą nazwę. Zastąp go tym:
val productWithPrice = Product("Super kosmetyk roku 2014", 1234.0d)
Cena 1234.0d ma literkę d na końcu, bo to jednoznacznie określa, że cena jest typu Double, a nie na przykład Float.
Do klasy Product dodaj metodę, która będzie określała czy produkt dużo kosztuje. Np. tak:
case class Product(name: String, ... inne wlasnosci ...) {
def isExpensive(): Boolean = {
przyjmijmy, ze jesli cena produktu jest wieksza niz 50 to produkt jest drogi
}
}
Teraz stwórz produkt, który kosztuje mało oraz taki, który kosztuje dużo.
val expensiveProduct = Product("kosmetyk1", 124.4d)
val cheapProduct = Product("kosmetyk2", 10.3d)
Sprawdź czy powyższe produkty są drogie:
expensiveProduct.isExpensive()
cheapProduct.isExpensive()
Oprócz nazwy i ceny wizażowe produkty posiadają ocenę. Dodaj własność rating: Int do produktu. Kiedy już to zrobisz, zmień produkty na np. takie:
val expensiveProduct = Product("kosmetyk1", 124.4d, 10)
val cheapProduct = Product("kosmetyk2", 10.3d, 5)
Każdy produkt ma stosunek cena/jakość. Dodajmy metodę do produktu, która to wyliczy. Tzn :
case class Product(name: String, ... inne wlasnosci ...) {
def calculatePriceRatingFactor(): Double = {
wylicz stosunek cena/jakosc
}
... inne metody ...
}
Teraz zobacz jaki stosunek cena/jakość mają Twoje produkty:
expensiveProduct.calculatePriceRatingFactor()
cheapProduct.calculatePriceRatingFactor()
Dodajmy teraz metodę do produktu, która zwróci nam bardziej opłacalny (ekonomiczny) produkt.
case class Product(name: String, ... inne wlasnosci ...) {
def getMoreEconomical(otherProduct: Product): Product = {
bardziej ekonomiczny produkt to taki, który ma lepszy stosunek cena/jakość
}
... inne metody ...
}
Użycie:
expensiveProduct.getMoreEconomical(cheapProduct)
Zajmijmy się naszym wizażowym sklepem, który jak na razie będzie posiadał nazwę oraz wiele produktów, tzn:
case class Shop(name: String, products: List[Product])
Stwórz sklep:
val lipstick = Product("super szminka", 5.0d, 8)
val shampoo = Product("szampon dla bobasa", 11.0d, 7)
val toothpaste = Product("blend-a-med", 7.5d, 9)
val cosmetics = List(lipstick, shampoo, toothpaste)
val shopWithCosmetics = Shop("Rossmann", cosmetics)