Przejdź do głównej zawartości

Posty

Wyświetlanie postów z wrzesień, 2018

[JS] Czym różnią się operatory "==" oraz "==="?

Operatory "===" i"==" służą do sprawdzania, czy dane wartości są równe. Różnica między nimi polega na tym, że: operator "==" dokonuje koercji typów operator "===" nie dokonuje koercji typów Koercja typów (ang. type coersion ) jest procesem, w którym przed porównaniem wartości zmiennych następuje próba sprowadzenia ich do tego samego typu. Innymi słowy: operator "===" nigdy nie zwróci nam true , jeśli porównywane zmienne są innych typów. Operator "==" nie jest taki ścisły, i na przykład wartości 0 i false uzna za równe. Przyjrzyjmy się kilku przykładom:  1 2 3 4 5 6 if ( 1 == "1" ) { console.log( "równe" ) } else { console.log( "nierówne" ) } Powyższy kod wypisze do konsoli słowo "równe" ponieważ operator "==" sprowadzi wartości 1 i "1" do tego samego typu (number). Gdybyśmy zmienili operator na "==="... 1 2 3 4 5 ...

[JS] Czym są truthy and falsy values?

Falsy values to takie wartości, które w kontekście porównań logicznych uznawane są za false . Innymi słowy, to takie wartości X, dla których niespełniony będzie warunek if(X) {...} Falsy values to: false 0 '' (pusty string) null undefined NaN Przykładowo, poniższy kod wypisze do konsoli "coś jak false": 1 2 3 4 5 6 if ( 0 ) { console.log( "coś jak true" ) } else { console.log( "coś jak false" ) } Dzięki temu, że null i undefined są traktowane jako false w kontekście porównań logicznych, sprawdzanie czy zmienna ma wartość sprowadza się do bardzo prostej operacji: 1 2 3 4 5 6 7 var a; if (a) { console.log( "zmienna ma wartość" ) } else { console.log( "wartość null lub undefined" ) } Truthy values w kontekście porównywań logicznych będą traktowane jako true. Truthy values to wszytskie te wartości, które nie należą do zbioru falsy values . Dlatego poniższy kod ...

[C#] Jak działają słowa kluczowe checked i unchecked?

W C# fragmenty programu mogą wykonywać się w dwóch kontekstach: checked i unchecked . Różnica polega na sposobie obsługiwania momentu przekroczenia zakresu liczbowego liczb całkowitych . Jak wiemy, każdy typ liczbowy ma swoje maksymalne i minimalne wartości. Na przykład: dla int to -2 147 483 648 do 2 147 483 647 ( int zapiany jest na 32 bitach, jeden bit przeznaczonyjest na znak (+/-), a zatem zakres to -(2^31) do 2^32-1) dla byte to 0 do 255 (8 bitów, bez znaku, czyli 2^8-1) dla short to -32 768 do 32 767 (16 bitów, jeden bit na znak, czyli zakres od -(2^16) do 2^16 -1) Jeśli kod wywołuje się w kontekście checked przekroczenie zakresu danego typu liczbowego rzuci wyjątek ArtihmeticOverflowException . Jeśli kod wykonuje się w kontekście unchecked , przekroczenie zakresu "przekręci" wartość liczby (z int.MaxValue + 1 zrobi się minus int .MaxValue). Żaden wyjątek nie zostanie rzucony. Przyjrzyjmy się jak to działa w praktyce. Najpierw świadomie przekroczmy wartość ...

[OOP] Na czym polega wzorzec projektowy Budowniczy (Fluent API)?

Wzorzec Budowniczy w wersji "Fluent API" (ang. Fluent Builder ) pozwala nam tworzyć instancje klas w sposób bardziej precyzyjny i czytelny niż za pomocą konstruktora. Rozważmy klasę reprezentującą drużynę piłkarską:  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 namespace Builder { internal class Team { public Team ( string name, string league, string shirtColor, string nickname) { Name = name; League = league; ShirtColor = shirtColor; Nickname = nickname; } public string Name { get ; private set ; } public string League { get ; private set ; } public string ShirtColor { get ; private set ; } public string Nickname { get ; private set ; } public override string ToString () { return $ "{Name} z {League}, kolor koszulek: {ShirtColor},...

[OOP] Na czym polega wzorzec projektowy dekorator?

Wzorzec projektowy dekorator (ang. decorator ) służy do dodawania funkcjonalności do istniejących klas w czasie działania programu. Dekorator należy do wzorców strukturalnych. Więcej o typach wzorców projektowych można poczytać tutaj [under construction]. Rozważmy następujący problem: naszym zadaniem jest napisanie aplikacji do zarządzania pizzerią. Na samym początku działania pizzerii dostępna jest tylko jedna pizza: margherita, czyli pizza tylko z sosem pomidorowym i serem. Tworzymy klasę, która będzie ją reprezentować. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 namespace Decorator { internal class Pizza { private const int BASIC_PIZZA_PRICE = 20 ; virtual public string About () { return "To jest pizza z sosem pomidorowym, serem" ; } public virtual int Price () { return BASIC_PIZZA_PRICE; } } } Z czasem jednak dostępne stają się...