[ITEM 4] QUESTION: Що таке getter і setter?
Гетери і сетери у JavaScript є спеціальними методами об'єктів і класів, які дозволяють керувати доступом до властивостей, маскуючи виклики функцій під звичайне присвоєння або читання значень. Гетер оголошується за допомогою ключового слова get перед ім'ям властивості, наприклад get propertyName() { return this._value; }, а сетер задається через ключове слово set, наприклад set propertyName(val) { this._value = val; }. Ключова особливість цих конструкцій полягає в тому, що вони викликаються як звичайні властивості через точкову нотацію, без використання круглих дужок, що робить інтерфейс роботи з об'єктом максимально прозорим і природним для розробника.
На практиці гетери та сетери незамінні тоді, коли вам потрібно реалізувати складну валідацію вхідних даних перед їх записом у приховане поле. Наприклад, сетер віку може перевіряти, чи є передане число додатним, і викидати помилку в іншому випадку, захищаючи об'єкт від некоректного стану. Гетери в свою чергу чудово підходять для автоматичного перерахунку обчислюваних властивостей, що залежать від інших параметрів, на льоту, позбавляючи необхідності синхронізувати дані вручну.
Крім валідації та обчислень, цей механізм активно використовується для логування будь-яких спроб читання чи модифікації внутрішнього стану об'єкта, що вкрай корисно під час налагодження складних систем. Ви можете легко відстежувати, в який момент часу і яке значення було присвоєно певній властивості, додавши в сетер відповідні виведення в консоль.
Крім того, цей механізм застосовний не тільки в класах, а й у звичайних літералах об'єктів, що дозволяє легко впроваджувати інкапсуляцію та реактивну поведінку в найрізноманітніші структури даних вашого додатка без написання надлишкового бойлерплейту. Це робить код надійнішим, гнучкішим і стійкішим до несподіваних змін з боку інших модулів програми.