eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.wwwTypeScript - jak uzyskać zmienne prywatne? Gdzie korzyści z TS?Re: TypeScript - jak uzyskać zmienne prywatne? Gdzie korzyści z TS?
  • 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

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: