-
Data: 2019-09-08 00:07:37
Temat: Re: TypeScript - jak uzyskać zmienne prywatne? Gdzie korzyści z TS?
Od: Marek S <p...@s...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu 2019-09-07 o 16:12, Roman Tyczka pisze:
>
>> Jeśli nie PHP, to może C#. Jeśli miałbym tworzyć standardy, to z
>> pewnością powieliłbym zachowanie się prywatnych zmiennych z tego
>> typu języków.
>
> To, że w jakichś językach jest to tak czy inaczej nie jest dowodem,
> że tak powinno być.
Chwila, ale nie rozmawiamy tu o postępowaniu sądowym, czy rozkminianiu
zagadek matematycznych by o jakichś dowodach wspominać.
Jeśli chcesz bawić się w dowody zachowania się zmiennych prywatnych w
JS, to z natury rzeczy stoisz na przegranej pozycji, bo czegoś takiego w
JS nie ma ... przynajmniej do momentu gdy zastosujemy sztuczek, jakie
opisałem. Wtedy można je wykrzesać nawet w natywnym JS i zachowują się
one dokładnie tak samo jak w innych językach.
Jeśli natomiast mówimy o zachowaniu się zmiennych prywatnych w TS to
może warto wrócić do podstaw i przeczytać definicję zmiennej prywatne.
Jej definicja jest jedna i wspólna dla wszystkich języków:
https://pl.wikipedia.org/wiki/Zmienna_prywatna
lub tu:
https://pl.wikipedia.org/wiki/Zmienna_(informatyka)
"Zmienne zadeklarowane w module mogą być zmiennymi prywatnymi modułu -
dostępnymi wyłącznie z jego wnętrza - lub zmiennymi publicznymi
(eksportowanymi) - dostępnymi tam, gdzie moduł jest wykorzystywany.
Podobnie jest ze zmiennymi w klasie - mogą być dostępne:
tylko dla danej klasy (zmienna prywatna),"
https://www.p-programowanie.pl/cpp/klasy-c/
"private - dostęp do składników klasy jest zabroniony z poza ciała klasy"
Nie chcę już cytować linków na ten sam temat w kontekście PHP czy Java.
Sposób zachowania zmiennych prywatnych jest tam również zgodny z definicją.
TS łamie tą definicję. Zdefiniowana przez niego zmienna prywatna w
klasie, w kodzie wynikowym będzie podlegać nadpisywaniu przez klasę
potomną. Owszem, powstanie podczas transkompilacji absurdalny błąd,
który nie ma prawa zaistnieć, a wadliwy kod wynikowy i tak wygeneruje się.
> Źródłem są przemyślenia. Oto mój tok rozumowania: Tworzysz obiekt
> klasy Test2. Klasa Test2 ma prywatne pole ukryte pod this._message.
> Wołasz z tego obiektu metodę, która zwraca this._message. Skoro jest
> to obiekt klasy Test2 to dla tego typu this._message jest czymś innym
> niż dla typy Test, prawda? Dla mnie to sprawa oczywista jak
> oddychanie ;-) Jest tu wyraźna niejednoznaczność i punkt sporny,
> który warto wywalić na twarz chociażby ostrzeżeniem.
>
> To, że Java czy C# zwraca bezrefleksyjnie (czy są jakieś ostrzeżenia
> kompilatora?) wcale nie jest fajne, bo łatwo o masę głupich błędów,
> które transpiler TS wyłapuje jak zeznałeś. Mnie to bardzo cieszy, bo
> nie uważam, że taka praktyka jak identyczna nazwa prywatnego pola w
> dziedziczeniu to dobra praktyka. Ot wszystko.
>
Hmmm... wydaje mi się, że taki sposób rozumowania i obawy o to, co jak
mają się zachowywać zmienne prywatne (niezależnie od języka
programowania) wynikają z Twojego niezrozumienia czym w ogóle są zmienne
prywatne. Zapewniam Cię, że ani w C ani w PHP obecność zmiennej
prywatnej w klasie bazowej nie będzie podlegać nadpisaniu w klasie
potomnej bo to są dwa oddzielne byty w dwóch różnych obszarach RAM.
Żadne ostrzeżenia o używaniu zmiennych prywatnych w obu klasach nie
powstaną w trakcie kompilacji C lub używania PHP bo ... nie ma o czym
ostrzegać. Nie ma w tym żadnego błędu jak i obie zmienne nie będą w
konflikcie. Jedynie TS się wyłamuje i nadużywa terminu prywatności.
Przypuszczam, że jest to zwyczajny błąd twórców TS.
Spytam jeszcze: czy Ty w ogóle programujesz z użyciem OOP? Masz
wątpliwości co do najbardziej podstawowych pojęć w tej technice.
--
Pozdrawiam,
Marek
Najnowsze wątki z tej grupy
- UWAGA: MAM PODEJRZENIE, ŻE onet.pl DOKONUJE ATAKÓW!!!
- Komisja sejmowa odrzuca petycję ws. obowiązkowych kanałów RSS na stronach podmiotów publicznych
- kol. sukces po polsku: "Samurai Labs. Technologia do zapobiegania samobójstwom"
- Wściekli obywatele spalili budynek parlamentu Nepalu [bo odcięli im amerykańskie serwery społecznościowe - przyp. JMJ]
- UWAGA: MAM PODEJRZENIE, ŻE trojmiasto.pl DOKONUJE ATAKÓW
- Cenzura na wolnemedia.net - likwidacja codziennej sekcji "Sygnały zauważone"
- Nowe style na energokod.pl
- Jak działa hosting w którym wykupuje się sam serwer i domenę, bez IP?
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Do sądu trafił pozew zbiorowy przeciw Google'owi - oskarżenie o praktyki monopolistyczne na rynku reklamy internetowej
- Jakie znacie działające serwery grup dyskusyjnych?
- is it live this group at news.icm.edu.pl
- php, linki z nazwami a $_GET, SEO
- www polityka pl captcha
- dyktatura brudnego palucha
Najnowsze wątki
- 2025-10-18 Zakrzewo => Konsultant SAP HCM <=
- 2025-10-17 "Przypadkowo wylosowany" sędzia odmówił ekstradycji Niemcom za NordStream
- 2025-10-17 Stare filmy o technice
- 2025-10-17 Warszawa => Starszy Konsultant SAP - obszar PP <=
- 2025-10-17 Warszawa => Java Full Stack Developer <=
- 2025-10-17 Warszawa => Konsultant Wiodący SAP PP <=
- 2025-10-17 Warszawa => Key Account Manager (Usługi HR) <=
- 2025-10-17 Ostrów Wielkopolski => Specjalista ds. Marketingu Online (PPC) <=
- 2025-10-17 Gdańsk => Konsultant ds. Wdrożeń ERP (moduł FK) <=
- 2025-10-17 Lublin => Programista Delphi <=
- 2025-10-16 Warszawa => Senior Algorithm Developer (Java/Kotlin) <=
- 2025-10-16 Poznań => SAP HCR Consultant <=
- 2025-10-16 Warszawa => Junior Rekruter <=
- 2025-10-15 Z podwórka Roberta:(
- 2025-10-15 BNP Paribas likwiduje rachunki GOoptima