Мова програмування rust: об`єктно-орієнтоване програмування

Відео: Основні принципи об`єктно-орієнтованого програмування. Що таке ООП і навіщо воно потрібне?

Об`єктно-орієнтоване програмування
Мова програмування Rust: об`єктно-орієнтоване програмування

Підхід до об`єктно-орієнтованого програмування в Rust схожий на такий у мові Go. Як таких класів немає, але можна «прив`язувати» функції спеціального виду до будь-якого типу і вони автоматично стають методами цього типу:
// Оголошуємо запис з двома полями struct A {
x: float,
y: float
}
// Додаємо до цього запису «реалізацію» impl A {
// Метод, складаються поля записи fn add (self) -gt; float {
return self.x + self.y
}
}
let a = A {x: 1.0, y: 2.0} - // Створюємо запис
io :: println (fmt! ( "% f", a.add ())) - // Викликаємо «прив`язаний» до неї метод

конструкція match

Найоригінальніша особливість синтаксису мови Rust - це конструкція match. Її коріння сягають конструкції switch в Сі, але в Rust вона перетворилася мало не на центральний елемент мови. У найпростішому вигляді match схожа на свого прабатька:
match my_number 2 = gt; io :: println ( "один або два"),
3..10 = gt; io :: println ( "інтервал від 3 до 10"),
_ = Gt; io :: println ( "щось інше")

Символ «_» використовується як заповнювач для довільного значення. У тілі match відбувається так звана «деструктуризація» - привласнення локальних імен полів типів даних:
// Функція приймає кортеж з двох чисел fn angle (vector: (float, float)) -gt; float {let pi = float :: consts :: pi- match vector {
// перший елемент кортежу має дорівнювати 0
// другий елемент кортежу заноситься в y
// якщо він менше нуля, то цей пункт спрацьовує,
// а інакше виконання йде далі і спрацьовує наступний (0f, y) if y 1.5 * pi, (0f, y) = gt; 0.5 * pi,
// Елементи кортежу заносяться в x і y і використовуються (x, y) = gt; float :: atan (y / x)



}
}

Така поведінка виглядає незвично, але воно дуже зручно і лаконічно описує складні логічні розгалуження.

Просунуті можливості мови

Давайте з вами більш докладно розглянемо просунуті можливості даної мови програмування.

узагальнене програмування

У Rust є узагальнені функції і записи, але їх поведінка відрізняється від звичного в С ++:
// Узагальнена функція для складання двох чисел ...
// Начебто виглядає елементарно: fn g(A: T, b: T) -gt; T {
return a + b;



}

Але не компілюється:
error: binary operation + can not be applied to type `` a `

Інформації за узагальненими функціями в документації дуже мало, але очевидно, що шаблони не підставляти на етапі компіляції, як в С ++ (перетворюючись в конкретні типи), а обробляються інакше. Чесно кажучи, мені так і не вдалося до кінця зрозуміти, чому не компілюється наведений вище фрагмент і як правильно використовувати узагальнені функції.

У Rust також немає шаблонного метапрограмування і можливості виконання коду на етапі компіляції, які доступні з C ++ і D.

Нить

Мова Rust створювався з прицілом на просту реалізацію багатопоточності і комунікації потоків. Породження нових потоків рекомендовано виконувати в функціональному стилі за допомогою блоку do. Тіло цього блоку стає замиканням, яке буде виконуватися в окремому потоці:
use core :: task :: spawn;
// Все, що знаходиться в тілі блоку do, стає тілом
// замикання, яке викликається в окремому потоці for int :: range (0, 20) | child_task_number | {
do spawn {
print (fmt! ( "Привіт, я окремий потік з номером% dn", child_task_number));
}
}

Комунікація між потоками здійснюється за допомогою портів і каналів. Канал - це відсилає кінець комунікаційного потоку, а порт - приймає. Канали «параметризуються» типом даних, який вони можуть передавати:
use core :: task :: spawn;
use core :: comm :: {stream, Port, Chan};
// Створюємо порт і канал для передачі цілих чисел
let (port, chan): (Port, Chan) = Stream ();
do spawn || {
// У новому потоці виконуємо якусь тривалу операцію
let result = some_expensive_computation () -
// Відсилаємо результат
chan.send (result);
}
// В основному потоці теж робимо щось тривале
some_other_expensive_computation () -
// Приймаємо результат
let result = port.recv () -

У мові передбачені також двонаправлені канали комунікації. В цілому реалізація багатопоточності практично повністю «злизана» з мови Go.



Створили унікальне додаток на мові програмування Rust і плануєте вивести його в маси? В такому випадку, поспішаю повідомити Вам, що в вашому починанні Вам допоможе тізерна мережу (https://good-teasers.ru), яка познайомить з вашим продуктом тисячі зацікавлених користувачів!

Більш детальну інформацію Ви знайдете на good-teasers.ru.

ІНШЕ

Мова програмування vala фото

Мова програмування vala

Hello world! Розгляд будь-якої мови програмування традиційно належить починати з найпростішої програми «Hello…

Мова програмування go фото

Мова програмування go

Відео: Топ-4 Кращих Мови програмування для Початківців | ТОП Мова програмування Go (https://qoianq.org/) з`явився в 2007…

» » Мова програмування rust: об`єктно-орієнтоване програмування