Мова програмування seed7: особливості та приклади використання

Відео: Програмування. Мова Сі. Математичні операції. Змінні. Типи змінних. урок 2.0

Мова програмування Seed7: особливості та приклади використання
Що ж являє собою Seed7, чи схожий він на інші мови, наскільки екзотичний? Перше і основне - це розширювана мова програмування, тобто синтаксис задається на рівні самої мови. Звичайно, Seed7 притаманний певний синтаксис, проте він визначений в бібліотеці, а не запрограмований жорстко в коді інтерпретатора або компілятора. У бібліотеки винесено практично все - навіть підтримка типів даних. До слова, крім «мовних» бібліотек, в Seed7 передбачені бібліотеки на всі випадки життя, але про це трохи пізніше.

Тепер про основні відмінності Seed7 від інших мов. Почну з того, що в ньому немає списку зарезервованих слів: синтаксис мови може задаватися користувачем, хоча, звичайно ж, є деякі попередньо конструкції. Ні оператора return - замість нього для повернення функцією значення використовується змінна result. На практиці немає різниці між функцією, оператором, процедурою і виразом. Масиви можуть бути параметрами функцій. Немає автоматичного приведення типів. Рядки можуть мати нескінченну довжину. Нескінченне число для значущих символів в ідентифікаторах.

Найпростіший приклад на Seed7 такий:
$ Include "seed7_05.s7i" -
const proc: main is
func
begin
writeln ( "hello world") -
end func-

У першому рядку (include) ми підключаємо стандартну бібліотеку Seed7, де крім іншого визначено, що функція main - точка входу в програму, а writeln - оператор для виведення текстового рядка. Потім йде рядок (const proc: main is), яка означає константний об`єкт main типу proc. Далі - нехай вас не заплутає знання Паскаля - в Seed7 для визначення функції або процедури служить конструкція:
func
end func-

Це може виглядати так:
func
begin
end func-

А може - так:
func
begin
end func-

Слово func - це початок функції, end func - кінець. Між ними може бути ще begin, а також local для оголошення змінних. Ось той же приклад, але з оголошенням рядки s_string зі значенням Hello world і її передачею в якості параметра для writeln:
$ Include "seed7_05.s7i";
const proc: main is
func
local
var string: s_hello is "Hello world" - begin
writeln (s_hello) - end func-

Як бачите, програми на Seed7 (в його «передвстановленому» варіанті) трохи схожі на Pascal. Схожість проявляється не тільки в синтаксисі, але і, наприклад, в способі оголошення параметрів. У Pascal, якщо функція не може змінювати значення параметра, то параметр оголошується без всякого, а якщо може, то з var:



function foo (a: integer- var b: integer)

У Seed7 незмінний параметр починається зі слова in, а змінний - inout:
# 10003- параметр можна використовувати тільки як константу:
const func integer: foo (in integer: a)

# 10003- значення параметра можна змінювати всередині функції, і ця зміна буде діяти і поза її межами:
const func integer: foo (inout integer: a)

# 10003- значення можна змінювати всередині функції, зміни не вийдуть за межі її тіла:
const func integer: foo (in var integer: a)

Нові синтаксичні конструкції також оголошуються подібно до функцій. Наведу приклад з документації. До того ж до звичайних циклам while і repeat / until додамо loop, який дозволяє виконувати вихід з циклу в його середині. Приклад використання loop:
loop
ch: = getc (inFile) - until ch = `n` do
stri : = Str (ch) -
end loop-

Тут ми читаємо посимвольний з файлу до тих пір, поки не зустрінеться символ нового рядка. Поки він не зустрічається, додаємо символ до рядка stri. Щоб додати в мову нову конструкцію циклу loop, треба визначити її так:



const proc: loop
(In proc: statements].) Until (ref func boolean: condition) do
(In proc: statements2) end loop is func
local
var boolean: exitLoop is FALSE;
begin repeat
statements] .;
if not condition then
statements2- else
exitLoop: = TRUE-
end if-
until exitLoop-
end func-

Щоб інтерпретатор «підхопив» таке визначення, треба ще додати рядок:
$ Syntax expr: .loop. (). Until. (). Do. (). End.loop is -gt; 25-

Я не зупиняюся на подробицях, оскільки прагну висвітлити найцікавіші сторони Seed7. Чи є в цій мові підтримка об`єктно-орієнтованого програмування? Так, але виглядає незвично. У Seed7 введена концепція інтерфейсів і втілень (implementations). Інтерфейс в Seed7 можна дуже грубо співвіднести з абстрактним класом в інших мовах програмування. А втілення - це похідні від інтерфейсу класи, що реалізують ту чи іншу функціональність. Наприклад, може бути інтерфейс читання растрових картинок - Raster, що визначає якийсь загальний набір функцій: читання, запис, надання доступу до даних зображення. І кілька втілень - окремо для форматів на зразок PNG, JPEG, TIFF.

приклад:
# Оголошуємо інтерфейс Raster
const type: Raster is new interface;
# Оголошуємо функцію відтворення картинки
const proc: draw (in Raster image) is DYNAMIC-

Функції draw все одно, що малювати - аби їй було передано параметр з втіленням інтерфейсу Raster. А ось втілення:
const type: PNG is new struct
var integer: width is 0-
var integer: height is 0;
# і так далі
end struct-

Тепер зв`яжемо інтерфейс і втілення:
type_implements_interface (PNG, Raster) -

І напишемо функцію-втілення саме для PNG:
const proc: draw (in PNG: image) is func
begin
# Якось малюємо image
end func-

Структури можуть успадковувати поля батьків. Ось як можна оголосити нащадка структури ClassA, доповнивши його строковим полем s:
const type: ClassB is sub ClassA
var string: s is "hello world" -
end struct-

Загальні зауваження по ООП в Seed7: поліморфізм і успадкування працюють, але їх підтримка здійснюється за рахунок функцій і структур - в загальному, схоже на «ООП без ООП» в GTK + (структури + функції), але все ж з великим ухилом в традиційне ООП.



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

ІНШЕ

Seed7: приклади фото

Seed7: приклади

Відео: Turok 2: Seeds Of Evil PC Gameplay Level 1 HD (Parte 1) Як я вже писав на початку статті, в дистрибутив Seed7…

Seed7: бібліотеки фото

Seed7: бібліотеки

Відео: пентагональними призма з насіння льону. П`ятикутна призма. геометричні фігури.Стереометрія Якщо Сі або C ++ без…

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

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

Відео: Яку мову програмування вибрати новачкові? Дивись рада від каналу Бути Програмістом Мови програмування ... Одні…

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

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

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

» » Мова програмування seed7: особливості та приклади використання