1. Ініціалізація за замовчуванням

Оголошення з ініціалізатором в Mash Script дозволяє оголосити змінну і одразу ініціалізувати її значенням. Наприклад, оголошення number i {} створить змінну i типу number, і проініціалізує її значенням за замовчуванням для цього типу, яке для числових типів буде 0:

// Звичайне оголошення

int a;
Out.println(a); // UnboundError


// Оголошення з ініціалізатором

int b { };
Out.println(b); // Вихід: 0

Аналогічно, оголошення string name { }; призведе до присвоєння змінній name пустого рядка ‘‘, що є стандартним для рядкових типів.

2. Ініціалізація з параметрами

Ініціалізація з параметрами дозволяє вказати аргументи, які передаються конструктору типу. Наприклад, ви можете вказати значення для змінної типу array в фігурних дужках, як у прикладі { 'Саша' }:

array chars { 'Саша' }; // ["С", ...]

Що еквівалентно ініціалізації за допомогою конструктора array('Саша'):

array chars = array('Саша');

Ініціалізація з параметрами дозволяє вказати не лише один аргумент, але й декілька, в тому числі ключові аргументи. Наприклад:

// Декілька аргументів

Point pt { 10, 20 };

// Ключові аргументи

Person person { name='John', age=30 };

// Змішані аргументи

Lable greeting { 'Hello, world!', root=window };

У першому прикладі, ініціалізація Point p { 10, 20 } передає два аргументи конструктору типу Point. У другому прикладі, Person person { name='John', age=30 }, використовуються ключові аргументи для явного вказання, який аргумент призначений для якого параметру конструктора.

Автор: Chris Ried. Опубліковано на Unsplash

3. Як це реалізовано?

Цей механізм реалізований через автоматичний виклик конструктора об'єкта. Наприклад, оголошення string name { }; по суті еквівалентне string name = string();, де string() - виклик конструктора, який створює новий об'єкт типу string. Такий самий підхід застосовується і для інших типів:

int i {}; // 0
string name {}; // ''
boolean is_prime {}; // false
array arr {}; // []
dict arr {}; // {}
Після виклику MyClass() спочатку викликається метод MyClass.__new__(), який створює та повертає новий екземпляр (об'єкт) цього класу. Після цього автоматично викликається метод __init__ цього екземпляру, який встановлює початкові значення об'єкта.

4. Приклад

У класі Pony використовується метод __init__, щоб ініціалізувати об'єкт з параметрами name і необов'язковим параметром age, який має значення за замовчуванням 0. Метод repr виводить інформацію про об'єкт. У функції main створюються два об'єкти Pony з різними параметрами і викликається метод repr для кожного з них, щоб вивести їхню інформацію.

import { * } from stdl;

class Pony {
  void __init__(name: string, age: int=0) { 
    this._name = name;
    this._age  = age;  
  }

  void repr() {
    Out.println('Name: {this._name}, Age: {this._age}') 
  }
}

void main() {
  Pony pony_1 { "Sunny Hooves" };

  // Name: Sunny Hooves, Age: 0
  pony_1.repr();


  Pony pony_2 { "Sparkle", 7 };

  // Name: Sparkle, Age: 7
  pony_2.repr();
}

Додатковий приклад демонструє створення об'єкта pony_3 класу Pony з параметрами "Whisper" та 3, звичним способом:

Pony pony_3 = Pony("Whisper", 3);

// Name: Whisper, Age: 3
pony_3.repr();

У Mash Script оголошення з ініціалізацією гарантує, що змінна Pony буде саме класом (типом даних), а не функцією чи об'єктом.

Автор: James Harrison. Опубліковано на Unsplash

Читати далі

  1. Змінні (оголошення, ініціалізація, присвоєння).

  2. Константи.

  3. Автоматична ініціалізація параметрів функції.

  4. Оператори +=, -= та інші.

  5. Область бачення змінних.

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Romashka
Romashka@Romashka

Створюю інтерпретатор Mash Src

113Прочитань
1Автори
1Читачі
На Друкарні з 16 березня

Більше від автора

  • Mash Script: Рядки, string

    Стаття охоплює різні аспекти роботи з рядками в мові Mash Script, включаючи їхній літеральний запис, методи, рядки-шаблони та інше.

    Теми цього довгочиту:

    Mash Script
  • Mash Script: Оголошення функцій

    Ця публікація охоплює основи роботи з функціями в мові програмування Mash Script: оголошення, використання опціональних параметрів, повернення значень, продвинуту типізацію та створення анонімних функцій.

    Теми цього довгочиту:

    Mash Script
  • Mash Script: Базовий синтаксис

    Опис базової структури програми написаної мовою Mash Script

    Теми цього довгочиту:

    Programming

Вам також сподобається

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Вам також сподобається