-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!.POSTED!not-for-mail
From: Marek S <p...@s...com>
Newsgroups: pl.comp.www
Subject: Re: TypeScript - jak uzyskać zmienne prywatne? Gdzie korzyści z TS?
Date: Sun, 8 Sep 2019 00:07:37 +0200
Organization: ICM, Uniwersytet Warszawski
Lines: 80
Message-ID: <ql19ne$ts7$1@news.icm.edu.pl>
References: <qkp5ov$imf$1@news.icm.edu.pl> <1...@t...com>
<qkrhgq$2sb$1@news.icm.edu.pl> <4...@t...com>
NNTP-Posting-Host: 89-77-183-104.dynamic.chello.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: news.icm.edu.pl 1567894062 30599 89.77.183.104 (7 Sep 2019 22:07:42 GMT)
X-Complaints-To: u...@n...icm.edu.pl
NNTP-Posting-Date: Sat, 7 Sep 2019 22:07:42 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101
Thunderbird/68.0
In-Reply-To: <4...@t...com>
Content-Language: pl
Xref: news-archive.icm.edu.pl pl.comp.www:403643
[ ukryj 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
- 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
- www.znanylekarz.pl
- Czy pytanie o sczytywanie stron programami/skryptami to tu?
- Grupy webdevowe
- Jak wydrukować stronę?
- IIS, kilka witryn
- linki <a href="/strona.php"> (ze slashami)
- co rozszerza stronę??
- responsywny akapit <p>
- Czy istnieje jakiś emulator przeglądarek pod Mac'a?
- taka sama konfiguracja dla localhost i produkcji
Najnowsze wątki
- 2024-11-21 Re: Dla mr. J.F`a, Trybuna i Wiesiaczka którzy "troszczą" się o państwowe i u których 0 pragmatyzmu
- 2024-11-21 Re: Dla mr. J.F`a, Trybuna i Wiesiaczka którzy "troszczą" się o państwowe i u których 0 pragmatyzmu
- 2024-11-21 Re: Dla mr. J.F`a, Trybuna i Wiesiaczka którzy "troszczą" się o państwowe i u których 0 pragmatyzmu
- 2024-11-20 "betamaxy" i inne voip-y dzisiaj
- 2024-11-21 Strach się bać
- 2024-11-21 Koniec smrodów
- 2024-11-20 Krematorium
- 2024-11-20 Taki tam szkolny problem...
- 2024-11-20 LIR2032 a ML2032
- 2024-11-20 SmartWatch Multimetr bezprzewodowy
- 2024-11-21 Środa Wielkopolska => Konsultant SAP <=
- 2024-11-21 Łódź => Spedytor Międzynarodowy <=
- 2024-11-21 Wrocław => Inżynier bezpieczeństwa aplikacji <=
- 2024-11-21 Kraków => Lead Java EE Developer <=
- 2024-11-21 Karlino => Konsultant wewnętrzny SAP (FI/CO) <=