Підручник з мови програмування D. Частина 1

      Даний пост починає серію перекладів D Programming Language Tutorial , щоб компенсувати інформаційний вакуум про це системному мовою. Кожна частина міститиме константою кількість матеріалу з книги, так як оригінальні глави мають широкий розкид у розмірі: від пари абзаців до декількох друкованих сторінок. Всі приклади коду перевіряються на поточному релізі компілятора dmd 2.065 , і якщо виникають проблеми з технічною частиною, прошу відписуватися в коментарях.
 
 
 
 

Подяки

Я хотів би подякувати мою дружину і дочку, які пережили стільки довгих годин, скільки я писав оригінальну версію на Турецькому і також Англійський переклад цієї книги.
 
Глави пройшли первинну перевірку членами турецького форуму Ddili Forum . Я вдячний турецькому ком'юніті D за підтримання мого азарту і мотивації на високому рівні.
 
Mert Ataol, Zafer Çelenk, і Salih Dinçer написали відгуки практично на кожну строчку книги. Can Alpay Çiftçi і Faruk Erdem Öncel відігравали важливу роль у розвитку та книги і ddili.org.
 
Спасибі наступним людям за їхні істотні виправлення, рекомендації та ідеї: Ergin Güney, Jordi Sayol, David Herberth, Andre Tampubolon, Gour-Gadadhara Dasa, Raphaël Jakse, Andrej Mitrovic, Johannes Pfau, Jerome Sniatecki, Jason Adams, Ali H. Çalışkan, Paul Jurczak, Brian Rogoff, Михайло Страшун, Joseph Rushton Wakeling, Tove, Hugo Florentino, Satya Pothamsetti, Luís Marques, Christoph Wendler.
 
Ця книга була вичитана Ergin Güney для поліпшення мого Інгліша (оріг. Inglish) до нормального Англійського.
 
 

Введення

Книга призначена для навчання мови D читачів — новачків у сфері програмування. Хоча наявність досвіду в інших мовах програмування безсумнівно було б корисним, ця книга починає з самих основ. Якщо ви зацікавились навчитися програмувати, я сподіваюся, що знайдете книгу корисною.
 
Для того, щоб книжка не була марною, нам буде необхідна середу для написання, компілювання і запуску програм на D. Ця середовище розробки повинна включати в себе, принаймні, такі елементи:
 
     
текстовий редактор
 компілятор для D
 
 
Замість того, щоб завантажувати і встановлювати їх окремо, можна розглянути варіант з інтегрованої середовищем розробки (IDE). Ви можете знайти інформацію про редакторах і IDE для D на сторінках Editors і IDE на dlang.org. Навчитися програмувати на D (прим. да взагалі на будь-якій мові, крім псевдокоду) без текстового редактора або комплілятора неможливо. Інструкції з установки компілятора dmd і як ним користуватися будуть розглянуті трохи пізніше в наступних розділах.
 
Кожна глава книги намагається ввести настільки мало нових понять, наскільки це можливо. Більшість глав містять кілька вправ, і до них є рішення для того, щоб порівняти свої рішення з моїми. (Прим. У даному перекладі рішення знаходяться під спойлерами поруч із завданнями.)
 
Я припускаю, що ви не пропускаєте глави. Якщо натикаєтеся на глави, які особливо важко даються, це може бути через те, що в книзі невдало надані всі необхідні поняття. Будь ласка, напишіть автору (acehreli@yahoo.com) (прим. залиште коментар) про такі проблеми, щоб допомогти зробити цю книгу корисніше.
 
Книга не розкриває програмування з використанням графічного інтерфейсу користувача (GUI). Хоча багато програм набагато зручніше використовувати разом з GUI, GUI безпосередньо не відноситься до мов програмування. Більш того, проектні рішення і стиль програмування з GUI може конфліктувати зі стилем самої мови і його стандартної бібліотеки, і ускладнити вивчення мови. Тому книга описує тільки консольні програми. Як тільки вивчені основи D і його стандартна біліботека, Phobos, ви зможете використовувати будь-яку бібліотеку для GUI, яку захочете.
 
Глави книги доступні онлайн в міру перекладу з Турецького мови. Можна використовувати стрічку RSS , щоб бути в курсі виходу нових глав.
 
Вивчати програмування набагато веселіше в колективі. Заходьте на D.learn newsgroup , щоб стежити за дискусіями і задавати питання, і відповідати на них.
 
 

Практика програмування

Дуже складно визначити беспорно, що саме включає в себе практика програмування, але ремісничий аспект в ній дуже сильний. Деякі умовиводи про програмування:
 
     
Це завдання створення програм, які змушують комп'ютер вести себе очікуваним чином
 Так як воно вимагає інструменти і використання цих інструментів керується досвідом програмістів-майстрів, воно є ремеслом
 Так як воно включає в себе вирішення проблем з обмеженнями, воно є інженерним мистецтвом
 Воно дуже захоплююче і приносить задоволення
 Воно не є образотворчим мистецтвом, але наскільки це можливо в будь-якій людській діяльності, програми можуть бути творами мистецтва
 Воно не є наукою, але використовувані в ньому методи створені наукою-інформатикою.
 
 
 

Може бути дуже складно навчитися програмуванню і викладати його

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

The Hello World

Першою програмою в більшості книг з програмування є hello world програмою. Це дуже коротка і проста програма, яка виводить «привіт світ» і завершується. Ця програма важлива, так як вона включає деякі базові поняття мови.
 
Нижче hello world на D:
 
import std. stdio ;

 void main ()
 {
writeln ("Hello world!" ) ;
 }
 
 Вихідний код вище повинен бути скомпільований компілятором D для створення викликається файлу.
 
 

Установка компілятора

На момент написання цієї глави можна вибирати з трьох компіляторів D: dmd , компілятор від Digital Mars; gdc , компілятор D для GCC; і ldc , компілятор, який використовує LLVM інфраструктуру.
 
 dmd — D компілятор, який використовувався для проектування і розробки мови в перебігу багатьох років. Всі приклади в цій книзі були протестовані на dmd . З цієї причини найпростіший вихід — почати з dmd і пробувати інші компілятори, якщо для цього є конкретна необхідність (прим. наприклад, gdc видає найбільш оптимізований код).
 
Для установки останньої версії dmd зайдіть на сторінку скачування на Digital Mars і виберіть версію компілятора, яка підходить під оточення комп'ютера. Ви повинні вибрати версію dmd , яка відповідає встановленій операційній системі і пакетному менеджеру, і збігається з архітектурою процесора: 32-розрядна або 64-розрядна. Не встановлюєте компілятор для D1 (прим. перша версія — вже історія)! Ця книга висвітлює тільки D другої версії .
 
Послідовність установки різна для різних оточень, але вона повинна бути настільки проста, як слідування простим інструкціям на екрані і натискання пари кнопок.
 
 

Исходник

Файл, який пише програміст для компіляції, називається файлом вихідних кодів або просто ісходник. Так як D — компільований мову, вихідні коди самі по собі не є виконуваними файлами. Вихідний код повинен бути переведений у виконувану програму компілятором.
 
Як і всі файли, ісходник повинен мати ім'я. Хоча це ім'я може будь-яким, яке дозволяется операційною системою, зазвичай використовується розширення . D для файлів з вихідними кодами на D, так як середовища розробки, інструменти програмування і програмісти чекають саме таке розширення. Наприклад, test.d , game.d , invoice.d і т.д. підходять як імена для исходника.
 
 

Компілювання hello world

Скопіюйте текст програми вище в текстовий файл і збережіть під ім'ям hello.d .
 
Компілятор скоро перевірить коректність синтаксису вихідного коду (тобто на відповідність правилам мови) і створить з нього програму перекладом в машинні коди. Для компіляції дотримуйтесь следущим кроках:
 
     
Відкрийте вікно консолі
 Перейдіть до директорії, де збережений hello.d
 Введіть таку комманду (Не пишіть символ $ , він для позначення командного рядка.)
 
$ dmd hello.d

 
Якщо ви не зробили помилок, то може здатися, що нічого не сталося. Інакше, це означає, що все пройшло добре. У папці повинен з'явиться виконуваний файл з ім'ям hello (або hello.exe під Windows), який тільки що був створений компілятором.
 
Якщо замість цього компілятор вивів кілька повідомлень, можливо ви зробили помилку при копіюванні коду програми. Спробуйте знайти помилку, виправити її і перезапустити компіляцію. Ви будете здійснювати безліч помилок при програмуванні, тому процес їх виправлення і компілювання стане звичним.
 
Як тільки програма вдало створилася, напишіть ім'я виконуваного файлу для її запуску. Програма повинна вивести «Hello world!»:
 
$ ./hello     ← запуск программы
Hello world!  ← сообщение, которое она вывела

(Прим. під Windows замість. / Hello потрібно вводити hello)
 
Вітаю! Ваша перша програма на D працює як очікується.
 
 

Прапори компілятора

Компілятор має безліч параметрів командного рядка, які використовуються для впливу на процес компіляції. Щоб побачити список параметрів, введіть тільки ім'я компілятора:
 
$ dmd    ← введите только имя
DMD64 D Compiler v2.065
Copyright © 1999-2013 by Digital Mars written by Walter Bright
Documentation: http://www.dlang.org/index.html
Usage:
  dmd files.d ... { -switch }

  files.d        D source files
...
  -unittest      compile in unit tests
...
  -w             enable warnings
...

 
Скорочений висновок вище показує тільки прапори, які я рекомендую завжди використовувати. Хоча це не має значення для hello world програми в цій главі, наступна комманда скомпілює програму з включеними попередженнями і модульними тестами . Ми розглянемо ці та інші параметри детальніше в наступних розділах:
 
$ dmd hello.d -w -unittest

 
Повний список параметрів dmd можна знайти в Оффициальная документації DMD .
 
Ще один прапор, який може бути корисним: -run . Він компілює вихідний код, створює виконуваний файл, і запускає його за одну комманду:
 
$ dmd -run hello.d -w -unittest
Hello world!  ← программа автоматически запустилась

 
 

IDE

У добавок до компілятору можна встановити IDE (інтегрована середовище розробки). IDE спроектовані для спрощення розробки програм шляхом спрощення кроків написання, компіляції та відлагодження коду.
 
Якщо ви встановите IDE, компіляція та запуск програми проводитимуться просто натисканням на клавішу клавіатури або кнопку в IDE. Я все ще рекомендую ознайомитися з компілювання програм вручну в консольному вікні.
 
Якщо ж вирішили встановити IDE, перейдіть на сторінку з IDE на dlang.org , щоб побачити список доступних IDE (прим. пер. Я користуюся DDT).
 
 

Розбір hello world програми

Ось короткий список з багатьох понять з D, які з'явилися в цій короткій програмі:
 
 Ядро: Кожна мова визначає свій синтаксис, фундаментальні типи, ключові слова, правила і т.п. Всі вони формують ядро ​​цієї мови. Круглі дужки, крапки з комою і слова, такі як: main і void — все відповідно до правил D. Це схоже на правила Англійського (Руського) мови: підлягають, дієслова, пунктуація, структура пропозиції і т.д.
 
 Ключове слово: Спеціальні слова, які є частиною ядра мови називаються ключовими . У цій програмі є два ключових слова: import , яке використовується для підключення модулів до програми; і void , яке означає «нічого не повертає».
 
 Бібліотека і функція: Ядро визначає тільки структуру мови. Воно використовуються для визначення функцій і користувача типів, і вони в свою чергу використовуються для проектування бібліотек. Бібліотека — колекція багаторазових частин програм, які зв'язуються (прим. лінкуются) з вашими програмами для допомоги в досягненні їхніх цілей.
 
 writeln вище є функцією в стандартній бібліотеці D. Вона використовується для виведення рядка тексту, як можна здогадатися по її імені: write line — написати рядок.
 
 Модуль: Вміст бібліотек зібрані за типами завдань, для вирішення яких вони призначені. Така група називається модулем. Єдиний модуль, який використовує наша програма — std.stdio , який відповідає за введення і введення даних.
 
 Символи та рядки: Вирази такі, як
"Hello world!"
називаються рядками , і елементи рядків називаються символами . Єдиний рядок в нашій програмі містить символи
'H'
,
'e'
,
'!'
та інші.
 
 Порядок виконання: Програми виконують свої завдання за допомогою виклику операцій в певному порядку. Виконання завдань починається з операцій, які написані у функції з назвою main . Єдина операція в нашій програмі виводить рядок
"Hello world!"
.
 
 Важливість регістра: Можна вибирати будь-які символи всередині рядків, але ви повинні використовувати інші символи точно так, як вони з'являються в програмі. Це так, тому що в програмах на D важливий регістр. Наприклад, writeln і Writeln є двома різними іменами.
 
Ми розглянемо всі ці особливості D докладніше в наступних розділах.
 
 

Вправи

 
     
Написати програму, яка виводить небудь інше.
 Змініть програму, щоб вона виводила більш ніж один рядок.
 Спробуйте скомпілювати програму після інших змін: наприклад, приберіть крапку з комою в кінці рядка з writeln і вивчіть помилку компіляції.
 
 
 Рішення
     
import std. stdio ;

 void main ()
 {
writeln ("Something else ...: p" ) ;
 }
 
 
import std. stdio ;

 void main ()
 {
writeln ("A line ..." ) ;
writeln ("Another line ..." ) ;
 }
 
 Наступна програма не може бути скомпільована, так як отстутсвія крапка з комою в кінці рядка з writeln :
 
import std. stdio ;

 void main ()
 {
writeln ("Hello world!" )
 }
 
 
 
 
 

writeln and write

У попередньому розділі ми побачили, що writeln бере рядок всередині круглих дужок і друкує її.
 
Частини програми, які фактично роблять роботу називаються функціями та інформація, яка їм потрібна для виполнененія роботи, називається параметрами . Акт передачі такої інформації функції називається передачею значень параметрів в функцію. Параметри передаються у функцію між круглими дужками і розділяються комами.
 
 Замітка: Слово параметр описує інформацію, яка передається у функцію на концептуальному рівні. Конкретна інформація, яка насправді передається під час виконання програми називається аргументом. Хоча й неправильно, але ці терміни іноді замінюють один одного в індустрії програмного забезпечення.
 
 writeln може брати більше одного аргументу. Вона друкує їх послідовно, один за іншим на тій же самій рядку:
 
import std. stdio ;

 void main ()
 {
writeln ("Hello world!" , "Hello fish!" ) ;
 }
 
Іноді вся інформація відразу, яка повинна бути надрукована на одній сходинці, може бути важкодоступна для передачі в writeln . У таких випадках перші частини рядки можуть бути роздруковані за допомогою write , і остання частина — за допомогою writeln .
 
 writeln переходить на наступний рядок, write залишається на тій же:
 
import std. stdio ;

 void main ()
 {
//  Напишемо  те,  що  можемо  на  даний  момент
write ("Hello" ) ;

// ...  предположим,  что  здесь  есть  еще  операции …

write ("world!" ) ;

/ /… і нарешті:
writeln () ;
 }
 
Виклик writeln без параметрів просто завершує поточний рядок.
 
Рядки, які починаються з
//
, називаються рядками коментарів або просто коментарями . Коментарі не є частиною коду в сенсі того, що вони не впливають на поведінку програми. Їх єдине призначення — пояснювати, що робить код в конкретних секціях програми. Аудиторією коментарів є будь-який, хто пізніше може прочитати вихідний код, в першу чергу включає програміста, який сам написав ці коментарі.

Вправи

Обидві програми в цій главі друкують рядка без пробілів між ними. Змініть програми так, щоб були присутні прогалини між аргументами, як в «Hello world!».
Також спробуйте викликати write з більш ніж одним параметром.


Рішення Один з методів — використовувати інший параметр посередині:
writeln (" Hello world! " , " " , " Hello fish! " ) ;


write також може брати кілька параметрів:
write (" one " , " two " , " & nbsp; three " ) ;




Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.