Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.lang.php > #15691

Re: Nikomu niepotrzebne zmienne prywatne?

From Marek S <precz@spamowi.com>
Newsgroups pl.comp.lang.php
Subject Re: Nikomu niepotrzebne zmienne prywatne?
Date 2018-01-27 13:24 +0100
Organization ATMAN - ATM S.A.
Message-ID <p4hr1e$bvl$1@node2.news.atman.pl> (permalink)
References <p4dakb$a6j$1@node2.news.atman.pl> <1fz90to1qzf67.dlg@tyczka.com> <p4do0k$drj$1@node1.news.atman.pl> <1j1wsv7x3pigv.dlg@tyczka.com>

Show all headers | View raw


W dniu 26-01-2018 o 23:22, Roman Tyczka pisze:

>> Czegoś takiego w klasach JS nie ma.
> 
> Dopiero raczkuję w JS, ale jeśli rzeczywiście nie ma pól prywatnych
> (property znam z Delphi i z czymś ciutkę innym mi się kojarzą) 

W nomenklaturze JS zmienne jako cechy obiektów lub też quasiobiektów to 
właściwości:

https://www.w3schools.com/js/js_properties.asp

Jest też gotowa metoda do ich tworzenia zawierająca "properties" w nazwie:

https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

> to w ogóle
> nie ma mowy o pełnej obiektowości, bo wszak obiekt to zbiór pól z danymi i
> metod do operowania na nich, dzięki czemu uzyskuje się jedną z
> fundamentalnych cech OOP czyli enkapsulację. Bez prywatności nie ma
> enkapsulacji, bo pola mogą być zmieniane poza logiką obiektu, a to prowadzi
> do nieprzewidzianych sytuacji.

O tym właśnie piszę. Zarówno standard JS (przynajmniej bieżący ECMA6) 
jak i programiści uważają właściwości prywatne chyba jako oldschoolowe. 
JS od dawna ogranicza się jedynie do rezerwacji słów kluczowych typu 
private czy protected ale nic z tym nie robi. Programiści JS, jak wynika 
z moich dyskusji, dziwią się, że coś takiego chcę używać.

Dla Twojej informacji: daje się symulować właściwości prywatne w klasach 
ale wymaga to łamańców. W Googlach grzebałem ze 2 dni i nigdzie 
przykładu poniższego nie znalazłem. Ja wykorzystuję do tego zmienne o 
zasięgu bloku, które deklaruje się słowem kluczowym let (nie var). 
Wykorzystuję też to, że klasę można rozszerzać nie tylko inną klasą, ale 
również - uwaga - wynikiem działania funkcji!!! Trzecia rzecz, korzystam 
z tzw słabych map lub symboli bo w JS właściwość nie musi być aresowana 
stringiem, ale również .... obiektem!

Dopiero taki burdel w kodzie utworzy zmienną prywatną:

let aClass = (function () {
	let a = Symbol("a");

	class aClass {
		readFromA() {
			console.log(this[a], this.b);
		}

		constructor() {
			this[a] = "aaa"; //this is private
			this.b = "bbb"; // this is public
		}

	}

	return aClass;
})();

let bClass = (function () {
	let a = Symbol("a");

	class bClass extends aClass {

		readFromB() {
			console.log("B", this[a], this.b);

		}

		constructor() {
			super();
			this[a] = "ccc"; //this is private
			this.b = "ddd"; // this is public
		}

	}

	return bClass;
})();



let bc = new bClass();
bc.readFromA(); // aaa ddd
bc.readFromB(); // ccc ddd


Wyrażenie "extends aClass" rozszerza klasę bClass o wynik działania 
funkcji anonimowej, który jest przechowywany w zmiennej sugerującej, że 
to klasa aClass a nie zmienna. Funkcja anonimowa zwraca natomiast 
deklarację tak samo nazwanej klasy: czyli aClass.

Super, co?

-- 
Pozdrawiam,
Marek

Back to pl.comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Nikomu niepotrzebne zmienne prywatne? Marek S <precz@spamowi.com> - 2018-01-25 20:19 +0100
  Re: Nikomu niepotrzebne zmienne prywatne? Roman Tyczka <noemail@because.no> - 2018-01-25 21:29 +0100
    Re: Nikomu niepotrzebne zmienne prywatne? Marek S <precz@spamowi.com> - 2018-01-26 00:07 +0100
      Re: Nikomu niepotrzebne zmienne prywatne? Roman Tyczka <noemail@because.no> - 2018-01-26 23:22 +0100
        Re: Nikomu niepotrzebne zmienne prywatne? Marek S <precz@spamowi.com> - 2018-01-27 13:24 +0100
  Re: Nikomu niepotrzebne zmienne prywatne? Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-27 22:59 +0100
    Re: Nikomu niepotrzebne zmienne prywatne? Marek S <precz@spamowi.com> - 2018-01-28 15:07 +0100
      Re: Nikomu niepotrzebne zmienne prywatne? Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-28 16:14 +0100
        Re: Nikomu niepotrzebne zmienne prywatne? Marek S <precz@spamowi.com> - 2018-01-28 20:35 +0100
          Re: Nikomu niepotrzebne zmienne prywatne? Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-28 22:01 +0100
            Re: Nikomu niepotrzebne zmienne prywatne? Marek S <precz@spamowi.com> - 2018-01-29 19:01 +0100
              Re: Nikomu niepotrzebne zmienne prywatne? Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-29 20:12 +0100
              Re: Nikomu niepotrzebne zmienne prywatne? Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-30 20:36 +0100
                Re: Nikomu niepotrzebne zmienne prywatne? Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-02-01 22:15 +0100

csiph-web