Підручник з мови програмування D

Подяки

Я хотів би подякувати мою дружину і дочку, які пережили стільки довгих годин, скільки я писав оригінальну версію Турецькою і також Англійський переклад цієї книги.

Глави пройшли первісну перевірку членами турецького форуму Ddili Forum. Я вдячний турецькому ком'юніті D за підтримку мого азарту та мотивації на високому рівні.

Mert Ataol, Zafer Çelenk, та Salih Dinçer написали відгуки практично на кожен рядок книги. Can Alpay Çiftçi та Faruk Erdem Öncel відігравали важливу роль у розвитку та книги та ddili.org.

Дякуємо наступним людям за їх суттєві виправлення, рекомендації та ідеї: Ергіна Гюні, Джорді Сайола, Девіда Герберта, Андрія Тампуболона, Ґор-Гададхара Даса, Рапхаела Якса, Андрія Мітровіка, Йоханнеса Пфау, Йерома Сніатеккі, Джасона Adamса, Алі Х. Çalı Jurczak, Brian Rogoff, Михайло Страшун, Joseph Rushton Wakeling, Tove, Hugo Florentino, Satya Pothamsetti, Luís Marques, Christoph Wendler.

Ця книга була відчитана Ergin Güney для покращення мого Інгліш (ориг. Inglish) до нормальної Англійської.

Книга призначена для навчання мови читачів D — новачків у сфері програмування. Хоча наявність досвіду в інших мовах програмування, безперечно, була б корисною, ця книга починає з самих основ. Якщо ви зацікавлені навчитися програмувати, я сподіваюся, що знайдете корисну книгу.

Для того, щоб книга не була марною, нам буде необхідне середовище для написання, компілювання та запуску програм на D. Цесередовище розробкиповинно включати, принаймні, наступні елементи:

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

Книга не розкриває програмування з використанням графічного інтерфейсу користувача (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.

Компілятор швидко перевірить коректність синтаксису вихідного коду (тобто. на відповідність правилам мови) і створить із нього програму переведенням у машинні коди. Для компіляції виконайте такі кроки:

  1. Відкрийте вікно консолі
  2. Перейдіть до директорії, де збереженоhello.d
  3. Введіть наступну команду (Не пишіть символ$, для позначення командного рядка.)

Якщо ви не припустилися помилок, то може здатися, що нічого не сталося. Інакше це означає, щовсе пройшло добре. У папці має з'явитися виконуваний файл з ім'ямhello(абоhello.exeпід Windows), який був створений компілятором.

Якщо натомість компілятор вивів кілька повідомлень, можливо ви зробили помилку при копіюванні коду програми. Спробуйте знайти помилку, виправити її та перезапустити компіляцію. Ви будете робити безліч помилок при програмуванні, тому процес їх виправлення та компілювання стане звичним.

Як тільки програма вдало створилася, напишіть ім'я файлу для її запуску. Програма має вивести Hello world!

(прим. під Windows замість ./hello потрібно вводити hello)

Вітаю! Ваша перша програма на D працює як очікується.

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

Компілятор має багато параметрів командного рядка, які використовуються для впливу на процес компіляції. Щоб побачити список параметрів, введіть лише ім'я компілятора:

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

Повний список параметрівdmdможна знайти в офіційній документації DMD.

Ще один прапор, який може бути корисним:-run. Він компілює вихідний код, створює файл, що виконується, і запускає його за одну команду:

На додаток до компілятора можна встановити 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");

//. припустимо, що є ще операції .

Викликwritelnбез налаштувань просто завершує поточний рядок.

Вправи

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

  1. Один із методів – використовувати інший параметр посередині:

writeln ("Hello world!", "", "Hello fish!");