Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [biblioteka] Rounder, Czyli jak round() wywołało frustrację
greycoffey
post
Post #1





Grupa: Zarejestrowani
Postów: 320
Pomógł: 29
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----


Hej,

sfrustrowany dzisiaj zachowaniem funkcji round() której zaokrąglanie half up i half down nie jest tym, za co się podaje, spłodziłem klasę, która robi to poprawnie. Zawiera interfejs oraz domyślną implementację zaokrąglacza, druga implementacja (oparta na bcmath) właśnie się tworzy (co do tego, macie jakiś pomysł na implementację metod roundHalfEven() i roundHalfOdd() w Pamil\Rounder\BcmathRounder w gałęzi bcmath-support?).

Przykład użycia i kod na GitHubie.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
lukasz1985
post
Post #2





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


"Klasa abstrakcyjna raczej nie powinna stanowić publicznego interfejsu w językach z pojedynczym dziedziczeniem. Na pewno nie w tym konkretnym przypadku."

Głupszego sformułowanie nie słyszałem. Klasa sama w sobie stanowi interfejs i definiuje kontrakt, więc nie ma tutaj "nie powinna" skoro fakt zupełnie zaprzecza nawet samemu "nie może". Służy do tego zazwyczaj słowo kluczowe "public". Definicja słowa interfejs nie obejmuje sobą tylko tego co w języku programowania ma słowo kluczowe "interface". Klasy abstrakcyjne są podstawą programowania obiektowego, a interfejsy głównie wszystkim poprzewracały w głowach. Rezultatem jest to, że zamiast właściwej kompozycji i dziedziczenia wszędzie są pociskane interfejsy i powielany kod.

Nikt nie potrzebuje klasy do zaokrąglania liczb, a jeśli już to wystarczy, że klasa "Rounder" będzie zaopatrzona w metody abstrakcyjne implementowane w klasach pochodnych (MathRounder czy InnyRounder).

A tworzenie takiej biblioteki mija się z celem bo jest ona za mała i każdy komu zaokrąglanie nie pasuje prędzej napisze własne funkcje niż znajdzie to w sieci. Nie ma też sensu pisanie testów do zadań trywialnych.
Go to the top of the page
+Quote Post

Posty w temacie
- greycoffey   [biblioteka] Rounder   30.12.2013, 21:28:35
- - gitbejbe   wygląda fajnie, klasa czytelna i zrozumiała. Choci...   31.12.2013, 10:44:49
- - pyro   Wygląda na sensownie skonstruowany kawałek kodu. N...   31.12.2013, 12:10:41
- - destroyerr   Cytatsfrustrowany dzisiaj zachowaniem funkcji roun...   31.12.2013, 12:49:04
- - greycoffey   @gitbejbe, trafiłeś w sedno, czas napisać coś, co ...   31.12.2013, 12:58:25
- - destroyerr   @greycoffey przekonałeś mnie. Za bardzo skupiłem s...   31.12.2013, 13:39:17
- - gitbejbe   @pyro zastosowanie interfejsów i abstrakcji też m...   31.12.2013, 14:52:56
- - greycoffey   @destroyerr, masz rację, przerobiłem Roundera na m...   31.12.2013, 17:09:16
- - Crozin   Drobne uwagi: - implements RounderInterface możesz...   31.12.2013, 17:45:35
- - pyro   Cytat(greycoffey @ 31.12.2013, 12:58...   31.12.2013, 18:20:46
- - lukasz1985   Na tym polega cały nonsens takich przedsięwzięć, ż...   6.01.2014, 16:02:33
- - com   @up to możesz dać choć jeden sensowny powód poco t...   6.01.2014, 16:20:49
- - Crozin   CytatInterfejsy są po to, żeby móc skorzystać z da...   6.01.2014, 16:42:57
|- - pyro   Cytat(Crozin @ 6.01.2014, 16:42:57 ) ...   6.01.2014, 17:26:11
- - lukasz1985   "Klasa abstrakcyjna raczej nie powinna stanow...   8.01.2014, 13:23:34
- - emp   Cytat(Crozin)Klasa abstrakcyjna raczej nie powinna...   8.01.2014, 13:40:38
- - Crozin   CytatKurcze, już w momencie pisania tamtego postu ...   9.01.2014, 11:10:46
- - lukasz1985   Naprawdę wątpię, żeby komuś chciało się do zaokrąg...   9.01.2014, 19:06:15
- - Crozin   CytatNaprawdę wątpię, żeby komuś chciało się do za...   9.01.2014, 19:31:40
- - greycoffey   Hej, ogarnąłem się po sylwestrze także mogę odpowi...   9.01.2014, 20:51:53


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 23:54