Article View: pl.comp.lang.php
Article #231922Nikomu niepotrzebne zmienne prywatne?
From: Marek S
Date: Thu, 25 Jan 2018 19:19
Date: Thu, 25 Jan 2018 19:19
61 lines
2698 bytes
2698 bytes
Witam.
Mój wątek dotyczy JS ale można go uogólnić. Otóż kiedyś programowałem
aplikacje w C++ i nie tylko w tym języku. Zmienne prywatne występowały w
kodach jak tlen w powietrzu. Sporo obecnie programuję w PHP i JS. Przy
okazji edycji ECMA6 tego ostatniego języka zdumiały mnie dwie rzeczy:
1. Wprowadzono wreszcie pojęcie klas i dziedziczenia ale... zignorowano
zmienne prywatne. Nie ma czegoś takiego w samych założeniach.
2. Gdy na międzynarodowym forum zapytałem o potrzebę symulacji zmiennych
prywatnych, wywołałem konsternację. Uzyskiwałem odpowiedzi w stylu
przecież tak ma być, co tu kombinować! Argumentacja moja w postaci
takiej iż jeśli wszystkie zmienne będą publiczne w dziedziczonych
klasach i nadpiszą się niechcący (bo autor klasy B może nie wiedzieć
jakich nazw nie powinien używać aby nie nadpisać przypadkiem tych z
klasy bazowej A - gdy obie są rozwijane więc nowe zmienne będą się
pojawiać), uzyskałem odpowiedź iż: no jak to możliwe, przecież w
dokumentacji poszczególnych klas trzeba pisać jakich nazw nie używać.
Zilustruję problem za pomocą JS:
"use strict";
class aClass {
readFromA() {
console.log(this.a);
}
constructor() {
this.a = 5;
}
}
class bClass extends aClass {
readFromB() {
console.log(this.a);
}
constructor() {
super();
this.a=10;
}
}
let bc=new bClass();
bc.readFromA(); //pokaże 10
bc.readFromB(); //pokaże 10
Wynik nie zaskakuje a ja głupi uparłem się by obie klasy mogły mieć
swoją prywatną zmienną "a". Osiągnąłem to w końcu korzystając z faktu,
że w JS to co jest po extends może być ... wyrażeniem (!!!).
Czy też sądzicie, że zmienne prywatne to przeżytek?
--
Pozdrawiam,
Marek
Technical Details
Message-ID:
<p4dakb$a6j$1@node2.news.atman.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail From: Marek S <precz@spamowi.com> Newsgroups: pl.comp.lang.php Subject: Nikomu niepotrzebne zmienne prywatne? Date: Thu, 25 Jan 2018 20:19:34 +0100 Organization: ATMAN - ATM S.A. Lines: 61 Message-ID: <p4dakb$a6j$1@node2.news.atman.pl> NNTP-Posting-Host: 89-69-207-111.dynamic.chello.pl Mime-Version: 1.0 X-Trace: node2.news.atman.pl 1516907979 10451 89.69.207.111 (25 Jan 2018 19:19:39 GMT) X-Complaints-To: usenet@atman.pl NNTP-Posting-Date: Thu, 25 Jan 2018 19:19:39 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 X-Mozilla-News-Host: news://news.atman.pl:119 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit