Author name: Damian

Kontrakt equals & hashCode

Kontrakt equals & hashCode wynika w dużej mierze z tego jak działają HashSet i HashMap. I jakby nie patrzeć dotyczy on sytuacji, gdzie wykorzystywane będą kolekcje oparte o obliczanie hashCode (czego umówmy się, najczęściej ciężko uniknąć podczas pisania kodu 😉 ). Kontrakt Kontrakt z drugiej strony Czyli zacznijmy teraz od warunku opartego o hashCode: Wydajność …

Kontrakt equals & hashCode Czytaj dalej »

HashSet i HashMap

Zarówno HashSet jak i HashMap są oparte o hashCode. Polegają one na hashCode w celu uporządkowania danych w tak zwanych koszykach (buckets). Po czym wewnątrz każdego koszyka, używana jest metoda equals, aby znaleźć konkretny element (jeśli jest ich więcej niż jeden w koszyku). Z takiego stanu rzeczy wynika też kontrakt equals & hashCode. Jak zostało …

HashSet i HashMap Czytaj dalej »

TypeScript – jak używać typów z w wyższej wersji ECMAScript a kompilować do niższej?

Aby móc używać typów z wyższych wersji należy użyć opcji lib, zaś aby kompilować kod do niższej wersji należy użyć opcji target. tsconfig.json Dzięki takiej konfiguracji możliwe jest korzystanie z elementów zawartych w ECMAScript z roku 2020 a kompilowanie do wersji z 2015. Często dołączenie typów dla ECMAScript z danego roku nie wystarcza. Tutaj można …

TypeScript – jak używać typów z w wyższej wersji ECMAScript a kompilować do niższej? Czytaj dalej »

ASCII, ANSI, UTF-8… – o kodowaniu znaków

Jak komputer przechowuje znaki? Warto na początku przypomnieć, że komputer przechowuje wszystkie dane jako bity (zero lub jeden). I tak w dużej mierze działa kodowanie znaków – danemu znaku przypada jakaś liczba: Znak Reprezentacja binarna … … A 01000001 B 01000010 C 01000011 D 01000100 … … Fragment tabeli ASCII Pierwszy standard kodowania – ASCII …

ASCII, ANSI, UTF-8… – o kodowaniu znaków Czytaj dalej »

Wzorzec Null Object

Wzorzec Null Object pozwala w niektórych sytuacjach wykorzystać polimorfizm do ominięcia sprawdzeń czy obiekt istnieje – if(object != null) then…. Przykład 1 – obsługa strzałek w grze Załóżmy, że mamy grę w której jest postać którą możemy się poruszać w lewo, prawo, do góry i w dół: I przykładowo mamy implementację standardowego poruszania: Wzorzec Null …

Wzorzec Null Object Czytaj dalej »

Git – force-with-lease

Używając Git możliwe jest wymuszenie wypchnięcia danych do zdalnego repozytorium: git push –force. Niestety jest to dosyć niebezpieczna opcja, która może nadpisać zmiany wprowadzone przez inną osobę. Dlatego lepszym rozwiązaniem jest force-with-lease. Komenda Przed czym zabezpiecza force-with-lease zabezpiecza przed nadpisaniem komitów dodanych do zdalnej gałęzi przez innych użytkowników: 1. Deweloper pierwszy przełącza się na gałąź …

Git – force-with-lease Czytaj dalej »

Memoizacja

Jest to forma „cachowania” wywołań funckji/metod. Jest szczególnie przydatna, jeśli wywołania funkcji/metod zajmują dużo czasu. Przykład implementacji (zaciągnięty z https://dzone.com/articles/java-8-automatic-memoization) Przykładowe użycie Jest to trywialny przykład wykorzystania, ale pokazuje działanie klasy Memoizer. Normalnie powinno się „memoizować” tylko funkcje/metody, które „pochłaniają” duże ilości zasobów. Wersja w TypeScript Warto zajrzeć 1. https://dzone.com/articles/java-8-automatic-memoization2. https://en.wikipedia.org/wiki/Memoization

TypeScript – alias

W języku TypeScript możliwe jest nadawanie aliasów dla typów lub też unii typów co może być bardzo pomocne. Alias dla typu Alias dla unii

TypeScript – never

never jest typem wykorzystywanym jako typ zwracany przez funkcję/metodę. Mówi on o tym, że nie wyjdziemy z funkcji/metody w standardowy sposób. Będzie to na przykład zgłoszenie wyjątku czy też nieskończona pętla. Przykład 1 – metoda rzucająca wyjątek Przykład 2 – nieskończona pętla