Intermediate - 1 - Access Modifiers _ Constructor

Хотілося б детальніше розібратися, що є конструктор та як він функціонує.

У нашій теорії написано: “As you can see, at the moment we created an instance of Person, the constructor was called. Empty brackets after the name of the class represent a constructor call.”

Не зрозуміло, чому раптом ми викликаємо конструктор, а не клас, адже у попередньому прикладі (де в класі не було конструктора), ми викликали тим самим синтаксисом саме клас.

Якщо у нас буде клас
class Person

і конструктор
public SomeOtherPerson()

, то створюючи новий об’єкт цього класу в іншому класі, що писатимемо:
var person = new Person();
або
var person = new SomeOtherPerson();
?

Тобто, ми таки клас викликаємо, чи конструктор?

А також: чим конструктор від метода відрізняється? (і обидва - від функції?). Теорія каже, що “A constructor is a function that is called whenever the object of a class is created.”

1 Like

Почну з кінця. В 2022 році функція і метод це одне й те саме. В більш старих мовах програмування була різниця між function (повертала значення) та procedure (не повертала значення). З еволюцією мов програмування, вони злилися в одне ціле.

Я би сказав що function - це більш наукове і загально-доступне визначення. Бізнес зазвичай приходить і каже який нам треба зробити “функціонал”. Метод - це сугубо програміське поняття.

2 Likes

Конструктор це спеціальна функція\метод яка дозволяє створити (сконструювати об’єкт).

Конструктор буває parameterless, а буває такий, що приймає параметри.
Коли ми створюємо об’єкт new Person() - на справді ми викликаємо конструктор (в даному випадку parameterless) класу Person, який створює новий об’єкт.

Якщо у нас буде клас
class Person

і конструктор
public SomeOtherPerson()

такого бути не може. Є чіткі правила. Конструктор має таку саму назву як і клас. Тобто

class Person
{
  public Person() {...} // конструктор класу Person
}

class SomeOtherPerson
{
  public SomeOtherPerson() {...} // конструктор класу SomeOtherPerson
}
3 Likes

Багато мов програмування дозволяють пропускати (omit) пусті конструктори. Таким чином,

class Person
{
   // public Person(){} - невидимий метод який ІСНУЄ і буде викликаний кожного разу як ви створюєте об'єкт (new Person())
   public string Name { get; set; }
}
3 Likes

I would like to slightly disagree with Viktor here, since terminology is important. Of course, sometimes we could be perceived as cool when we use terms like function, method, procedure interchangeably, like we do not care, but to some people that would be indication that person probably doesn’t really know the difference between them.

For object oriented language, e.g. C#, I would recommend to stick to the word “method”. Since I cannot recall usage of word “function” anywhere in official documentation.

For other languages, e.g. JavaScript, on the contrary, I would have used word “function”. Again, one of the important reasons is that the word which is used the most in the documentation, specification of the language.

On paper, function and method could be exactly same thing - reusable piece of code. When we deal with objects, term “method” is used the most, hence we say “method” when we talk about language like C#, Java, etc. Even in JavaScript, we could say that method is a property of an object which has function as its value.

Another rule of thumb would be probably to say that we can use word function, when they exist as a first-class citizens in the given language, which means functions can be declared and then called without declaring objects/classes. We would never say the same about term “method”, since this word is always associated with objects/classes.

A constructor is a method whose name is the same as the name of its type.

3 Likes