• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed javascript - gettery i settery - po co?

Object Storage Arubacloud
0 głosów
2,396 wizyt
pytanie zadane 21 czerwca 2017 w JavaScript przez crova Użytkownik (940 p.)
zamknięte 21 czerwca 2017 przez HaKIM
Witam,

nie bardzo rozumiem do czego mogą się przydać gettery i settery w literałach obiektów i klas w JS. Wydaje mi się, że tworzenie zwykłych kluczy-wartości jest dużo bardziej czytelne i wymaga użycia mniejszej ilości znaków. Co prawda podejrzewam, że gettery i settery są mniej obciążające pamięć, co może być pewnym uzsadnieniem dla ich użycia w pewnych przypadkach, jednak średnio to do mnie przemawia. Proszę o wyjaśnienie, czego tutaj nie rozumiem :)

Pozdrawiam,

crova
komentarz zamknięcia: Problem rozwiązany.

1 odpowiedź

+2 głosów
odpowiedź 21 czerwca 2017 przez Comandeer Guru (601,530 p.)
wybrane 21 czerwca 2017 przez HaKIM
 
Najlepsza
class MyNumber {
	constructor( value ) {
		this.value = value;
	}

	get sqrt() {
		return Math.sqrt( this.value );
	}
}

const myNumber = new MyNumber( 4 );
console.log( myNumber.sqrt );

// lub

const myNumber2 = {
	value: 9,
	get sqrt() {
		return Math.sqrt( this.value );
	}
};

console.log( myNumber2.sqrt );

Co do setterów: pozwalają np. przeprowadzać walidację zanim przypiszą własności wartość

class MyNumber {
	constructor( value ) {
		this.value = value;
	}

	get value() {
		return this._value;
	}

	set value( value ) {
		if ( typeof value !== 'number' ) {
			throw new TypeError( `Value must be a number, ${ typeof value } provided.` );
		}

		this._value = value;
	}
}

const myNumber = new MyNumber( 4 );
myNumber.value = 9; // OK
myNumber.value = 'a'; // TypeError

 

komentarz 21 czerwca 2017 przez crova Użytkownik (940 p.)

Rzeczywiście użycie settera jest wygodniejsze dla walidacji niż metoda 'ręczna'. Nie mniej jednak nadal nie bardzo rozumiem w czym zapis:

 

class MyNumber {
    constructor( value ) {
        this.value = value;
    }
 
    get sqrt() {
        return Math.sqrt( this.value );
    }
}

jest lepszy od

class MyNumber {
    constructor( value ) {
        this.value = value;
    }
 
    sqrt() {
        return this.value*this.value;
    }
}

 

komentarz 21 czerwca 2017 przez Comandeer Guru (601,530 p.)

W tym, że mój zwraca pierwiastek, gdy user chce pierwiastek, a Twój potęgę :P

A tak na serio: kwestia podejścia IMO. Gettery ukrywają sporo magii pod spodem i nie są tak bezpośrednie jak wywołanie metody. Przydaje się to np. w bibliotekach typu jQuery, żeby $p[ 0 ] dawało to samo, co $p.get( 0 ). Wówczas wystarczy podczepić getter pod własność 0 i wywołać $p.get( 0 ).

komentarz 21 czerwca 2017 przez crova Użytkownik (940 p.)
Wtopa z lekkiego zmęczenia :)

Dzięki za krótką, ale na razie mi wystarczającą odpowiedź.
1
komentarz 11 lipca 2017 przez niezalogowany

O co chodzi z tą podłogą? Celowy zabieg czy literówka? Jeśli tak, to jak się to nazywa, bo bym przeczytał o co chodzi, a za pomocą znaków specjalnych ciężko coś znaleźć w google.

return this._value;
this._value = value;

(Sorry za odkop, ale uczę się setterów i getterów, a w necie trochę mało). 

1
komentarz 11 lipca 2017 przez Comandeer Guru (601,530 p.)
To taka strasznie niedoskonała konwencja do określenia, które własności są prywatne.

Podobne pytania

0 głosów
1 odpowiedź 189 wizyt
pytanie zadane 18 marca 2021 w C i C++ przez Adamek185wp Obywatel (1,280 p.)
+1 głos
2 odpowiedzi 247 wizyt
pytanie zadane 7 stycznia 2016 w C# przez Mateusz Tocha Bywalec (2,560 p.)
0 głosów
0 odpowiedzi 495 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...