tag:blogger.com,1999:blog-20941681.post6147065138995279009..comments2024-02-13T18:09:44.121+01:00Comments on Jacek Laskowski scala jawnie: Męk intelektualnych kontynuacja - taskassin na GitHubie dzień 2Anonymoushttp://www.blogger.com/profile/09734540973692423017noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-20941681.post-38993903582082143732013-06-28T12:26:23.094+02:002013-06-28T12:26:23.094+02:00Temat wydał mi się interesujący więc napisałem o t...Temat wydał mi się interesujący więc napisałem o tym na blogu: <a rel="nofollow" href="http://mpieciukiewicz-pl.blogspot.com/2013/06/sortowanie-list-w-scala.html">Sortowanie list w Scala</a>Marcin Pieciukiewiczhttps://www.blogger.com/profile/14703396936344720814noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-60231886292339457812013-06-28T12:25:26.563+02:002013-06-28T12:25:26.563+02:00Ten komentarz został usunięty przez autora.Marcin Pieciukiewiczhttps://www.blogger.com/profile/14703396936344720814noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-11027648833242634062013-06-28T11:11:08.768+02:002013-06-28T11:11:08.768+02:00Cześć, zacząłem się przyglądać Twoim przygodom z T...Cześć, zacząłem się przyglądać Twoim przygodom z Taskassin i mam kilka przemyśleń, które mogą dać inną perspektywę na pewne kwestie.<br /><br />Na początek sortowanie listy zadań. Oprócz twojego podejścia z podaniem nazwanej funkcji w metodzie sortWith można zastosować trzy inne podejścia (pewnie może być ich więcej, ale te są chyba najprostsze):<br /><br />1. Jeżeli sortowanie zadań będzie zawsze odbywać się po polu due, to wykorzystajmy obiektowość i rozszerzmy Task o właściwość Ordered[Task]:<br /><br />case class Task(label: String, due: DateTime, timeUnits: Int = 6,<br /> recurring: Boolean = false, recurTimes: Int = 0, intervalUnits: Int = 0) extends Ordered[Task] {<br /> def compare(other: Task): Int = this.due.compareTo(other.due)<br />}<br /><br />dzięki temu sortowanie listy zadań będzie można wykonać następująco:<br /><br />val ts = List(t1, t2, t3).sorted<br /><br />2. Jeżeli przyjmiemy, że zadania można sortować na kilka sposobów, np. dodatkowo po nazwie, to w klasie towarzyszącej możemy zdefiniować konkretne sposoby porządkowania wykorzystując Ordering[task]<br /><br />case class Task(label: String, due: DateTime, timeUnits: Int = 6,<br /> recurring: Boolean = false, recurTimes: Int = 0, intervalUnits: Int = 0)<br /><br />object Task {<br /> val orderingByDue = Ordering.fromLessThan((a:Task, b:Task) => a.due < b.due)<br /> val orderingByLabel = Ordering.fromLessThan[Task](_.label < _.label)<br />}<br /><br />(orderingByLabel wykorzystuje skróconą notację funkcji anonimowej)<br /><br />W takiej stytuacji sortowanie wygląda następująco:<br /><br />val ts = List(t1, t2, t3).sorted(Task.orderingByDue)<br /><br />3. Jeżeli jednak nie chcemy narzucać programiście jakiego sortowania powinien używać można wykorzystać metodę sortBy, której parametr wskazuje, którego pola klasy należy użyć do sortowania:<br /><br />val ts = List(t1, t2, t3).sortBy((t:Task) => t.due)<br /><br />A jeszcze lepiej użyć skróconej i bardziej czytelnej formy:<br /><br />val ts = List(t1, t2, t3).sortBy(_.due)<br /><br />4. Jeżeli rozwiązanie z punktu 3. nie jest wystarczające (bo. np sortowanie jest bardziej skomplikowane) metoda sortBy, która przyjmuje funkcję według której zostaną posortowane elementy, będzie jak znalazł:<br /><br />Ponieważ Ty ją wykorzystałeś pokażę tylko przykład formy skróconej:<br /><br />val ts = List(t1, t2, t3).sortWith(_.due < _.due)<br /><br /><br />Podsumowując, ja skłaniałbym się ku metodom 1. lub 2. ponieważ umożliwiają zdefiniowanie kontekstu biznesowego, którego programista nie będzie musiał odkrywać za każdym razem, gdy będzie chciał posortować kolekcję (oczywiście mowa o bardzie skomplikowanych przypadkach niż ten w taskassin). I oczywiście na pewno jest jeszcze dużo więcej sposobów sortowania, ale chciałem dodać swoje 5 groszy ;)Marcin Pieciukiewiczhttps://www.blogger.com/profile/14703396936344720814noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-17435669305464103832013-06-16T15:46:22.970+02:002013-06-16T15:46:22.970+02:00Na to liczę! Co mnie zwykle przytłacza, to mnogość...Na to liczę! Co mnie zwykle przytłacza, to mnogość projektów w danym języku bez opisu, dlaczego podejmowane były te a nie inne techniki i rozwiązania. Koniecznie opisuj swoje doświadczenia na blogu.Anonymoushttps://www.blogger.com/profile/09734540973692423017noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-78074777993037266962013-06-16T15:06:11.235+02:002013-06-16T15:06:11.235+02:00Sam również planuję coś skrobnąć w Scali, pewno Tw...Sam również planuję coś skrobnąć w Scali, pewno Twoje doświadczenia przydadzą się i mi ;) Powodzenia i wytrwałości!Michał Fijołekhttps://www.blogger.com/profile/10207206659064977289noreply@blogger.com