Siema, wstrzeliles sie swietnie z tym filmem, jeden chyba z bardziej wartosciowych jakie ogladalem w ostatnim czasie. Ostatnio rozwiązuje sobie zadania z advent of code, czasami musze tam stworzyc calkiem sporo loopow i zmiennych. Zaczelem wlasnie robic tak jak poleciles w tym filmie, opakowywac wszystko w klasy. Meeega mi to pomoglo w ogarnieciu tego co sie dzieje. Kod sie staje duzo bardziej czytelniejszy i tym bardziej zaglembiam sie w ten swiat tym bardziej uwazam ze clean code to jedna z wazniejszych rzeczy. Mam takie pytanie odnoscie takich malutkich wrapperow. Otoz jak sie uczylem o klasach to powiedziano mi ze pola w klasach powinny zawsze byc prywatne a do wyciagania danych i ich zmiennniania powinnienem uzywac getterow i setterw. Czy w przypadku takich ultra malych klas stworzenie publicznego pola bedzie zbrodnia?
Powróciłem do tego filmu po jakimś czasie i przyszło mi do głowy pytanie. Czy nie lepiej takie pojedyncze prymitywy obudować w strukturę? Wtedy pozostaje to typem bezpośrednim na stosie i może to chyba podnieść wydajność?
Bo technicznie jest złożony z tablicy znaków i w C# mogli go sobie w ten sposób potraktować. Ale tutaj w omawianym problemie nie mówię o żadnej konkretnej implementacji w konkretnym języku programowania. Na poziomie technicznym faktycznie String nie jest prymitywem, bo procesor nie ma takiego typu. Ale z logicznego punktu widzenia i z punktu widzenia struktury naszego kodu string jest prymitywny, bo sam w sobie nie przenosi żadnej informacji o tym jakie konkretnie dane w nim trzymamy, tylko jest budulcem innych, konkretnych typów.
Hej, ale cala idea tego ze uwaza sie Stringa za primitive value wychodzi z tego prostego przykładu: String test = "test"; String test2 = test; test = "non primitive"; System.out.println(test2); OUTPUT: test Jesli String nie byl by prymitywny to output bylby "non primitive". W przypadku "refference variables" w zmiennej zapisujemy nie sama wartosc a address zmiennej. Wiec przypisujac do nowej zmiennej adres z innej tak naprawde mamy ten sam obiekt zapisany w 2 zmiennych i zmieniajac jedna zmienna wplywamy rowniez na druga. W przypadku Stringa test i test2 to 2 rozne obiekty z 2 roznymi wartosciami mimo ze sa equal. Co prawda podalem przyklad z Javy ale w C# jest tak samo w tym przypadku. Z ciekawosci dodam ze w javie istnieja tez takie typy jak Integer czy Character i dzialaja na podobnej zasadzie jak String i mozemy dzieki temu uzywac ich w listach i innych generycznych strukturach.
Dzięki za podpowiedź. Samemu nigdy o tym nie pomyślałem :D
Gut idea , wszystko jest obiektem
Siema, wstrzeliles sie swietnie z tym filmem, jeden chyba z bardziej wartosciowych jakie ogladalem w ostatnim czasie. Ostatnio rozwiązuje sobie zadania z advent of code, czasami musze tam stworzyc calkiem sporo loopow i zmiennych. Zaczelem wlasnie robic tak jak poleciles w tym filmie, opakowywac wszystko w klasy. Meeega mi to pomoglo w ogarnieciu tego co sie dzieje. Kod sie staje duzo bardziej czytelniejszy i tym bardziej zaglembiam sie w ten swiat tym bardziej uwazam ze clean code to jedna z wazniejszych rzeczy.
Mam takie pytanie odnoscie takich malutkich wrapperow. Otoz jak sie uczylem o klasach to powiedziano mi ze pola w klasach powinny zawsze byc prywatne a do wyciagania danych i ich zmiennniania powinnienem uzywac getterow i setterw. Czy w przypadku takich ultra malych klas stworzenie publicznego pola bedzie zbrodnia?
Powróciłem do tego filmu po jakimś czasie i przyszło mi do głowy pytanie. Czy nie lepiej takie pojedyncze prymitywy obudować w strukturę? Wtedy pozostaje to typem bezpośrednim na stosie i może to chyba podnieść wydajność?
String nie jest typem prymitywnym :P
Jest zaliczany do typów prymitywnych, ale nie prostych
@@zajacmarek Jesteś pewien? W C# wykonując funkcję typeof(string).IsPrimitive otrzymamy false.
Bo technicznie jest złożony z tablicy znaków i w C# mogli go sobie w ten sposób potraktować. Ale tutaj w omawianym problemie nie mówię o żadnej konkretnej implementacji w konkretnym języku programowania. Na poziomie technicznym faktycznie String nie jest prymitywem, bo procesor nie ma takiego typu. Ale z logicznego punktu widzenia i z punktu widzenia struktury naszego kodu string jest prymitywny, bo sam w sobie nie przenosi żadnej informacji o tym jakie konkretnie dane w nim trzymamy, tylko jest budulcem innych, konkretnych typów.
A property IsPrimitive można nadpisać jak coś ;)
Hej, ale cala idea tego ze uwaza sie Stringa za primitive value wychodzi z tego prostego przykładu:
String test = "test";
String test2 = test;
test = "non primitive";
System.out.println(test2);
OUTPUT: test
Jesli String nie byl by prymitywny to output bylby "non primitive".
W przypadku "refference variables" w zmiennej zapisujemy nie sama wartosc a address zmiennej.
Wiec przypisujac do nowej zmiennej adres z innej tak naprawde mamy ten sam obiekt zapisany w 2 zmiennych i zmieniajac jedna zmienna wplywamy rowniez na druga.
W przypadku Stringa test i test2 to 2 rozne obiekty z 2 roznymi wartosciami mimo ze sa equal.
Co prawda podalem przyklad z Javy ale w C# jest tak samo w tym przypadku.
Z ciekawosci dodam ze w javie istnieja tez takie typy jak Integer czy Character i dzialaja na podobnej zasadzie jak String i mozemy dzieki temu uzywac ich w listach i innych generycznych strukturach.