Към съдържанието
wannacode

Първата програма

Проблем

Компютърът прави точно каквото пише

Компютърът не се досеща какво искаш. Изпълнява команди, една след друга, точно както са написани. Поредицата от такива команди е програма.

Ето цяла програма. Тя отпечатва два реда на екрана:

hello.js
console.log("Добре дошъл!");
console.log("Това е първата ти програма.");
Изход
Добре дошъл!
Това е първата ти програма.

Това е цялата програма: два реда, по една команда на ред. Няма обвивка около тях. Записваш ги във файл hello.js и го пускаш.

Идеята

Какво има в програмата

  • Програмата е самият файл. Изпълнява го Node.js: програмата, която пуска JavaScript извън браузъра. Тя минава през редовете отгоре надолу, от първия до последния.
  • console.log(...) отпечатва текста в скобите и минава на нов ред.
  • Текстът е в двойни кавички: "Добре дошъл!". Кавичките не се печатат.
  • Всяка команда завършва с ;. JavaScript често се справя и без него, но ние го пишем винаги: така се вижда къде свършва командата.

Програмата се пуска от терминала, в папката на файла:

Терминал
node hello.js

Node.js чете файла и изпълнява командите в него. Няма отделна стъпка, в която кодът се превежда предварително: пишеш и пускаш.

По-точно, за любопитните
  • Главните и малките букви имат значение. Console.log не е същото като console.log и програмата спира с грешка, когато стигне до този ред.
  • Текстът може да е и в единични кавички: console.log('Добре дошъл!'); печата същото. В курса пишем двойни.
  • JavaScript работи и в браузъра. Там console.log печата в конзолата на инструментите за разработчици (F12). В курса пускаме програмите с Node.js.

Идеята

Печат с нов ред и без

Понякога искаш няколко парчета текст на един ред. console.log винаги минава на нов ред, затова за това има друга команда: process.stdout.write. Тя отпечатва текста и остава на същия ред.

process.stdout.write("Поръчка ");
process.stdout.write("№1024");
console.log(" е приета.");
console.log("Доставка: утре");
Изход
Поръчка №1024 е приета.
Доставка: утре

Първите два реда в кода са с process.stdout.write, затова „Поръчка“, „№1024“ и „е приета.“ излизат заедно. След console.log следващият текст започва на нов ред.

Обърни внимание на интервалите. Те са вътре в кавичките, защото компютърът не слага интервал сам.

Следи курсора: текстът излиза винаги там, където е той.

process.stdout.write("Поръчка ");
process.stdout.write("№1024");
console.log(" е приета.");
console.log("Доставка: утре");
Стъпка по стъпка, с думи
  1. process.stdout.write печата „Поръчка “ и курсорът остава на същия ред.
  2. process.stdout.write печата „№1024“ и курсорът остава на същия ред.
  3. console.log печата „ е приета.“ и курсорът минава на нов ред.
  4. console.log печата „Доставка: утре“ и курсорът минава на нов ред.
  5. Интервалите са вътре в кавичките: компютърът не слага интервал сам.
По-точно, за любопитните

process.stdout е изходът на програмата в Node.js. В браузъра го няма: там текстът за един ред се събира и се печата наведнъж с console.log.

Пробвай

На колко реда?

Какво ще отпечата програмата?

process.stdout.write("Влак ");
console.log("8:15");
process.stdout.write("Перон ");
process.stdout.write("3");
console.log();
Отговор

Идеята

Коментари: бележки за хората

Понякога искаш да оставиш бележка в кода: защо е така или какво предстои. Пишеш я като коментар. Компютърът пропуска коментарите.

  • // започва коментар до края на реда.
  • /* и */ ограждат коментар на няколко реда.
/* Бележката на кафенето.
Цените са в евро. */
console.log("Кафе 2,50 €");
// console.log("Кроасан 1,80 €");
console.log("Общо 2,50 €"); // кроасаните свършиха
Изход
Кафе 2,50 €
Общо 2,50 €

Редът с кроасана е код, но е зад //, затова не се изпълнява. Така временно изключваш ред, без да го триеш.

Добрият коментар казва защо, не какво. Кодът сам показва какво прави.

Пробвай

Кое ще излезе?

Какво ще отпечата програмата?

console.log("9:00 Математика");
// console.log("10:00 Физика");
console.log("11:00 История"); // после е обяд
Отговор

Проблем

Програмата не тръгва

Написал си програмата, пускаш я, а тя дори не започва. Не излиза нито един ред. Вместо изход получаваш съобщение:

welcome.js
console.log("Добре дошъл в курса!"
console.log("Започваме.");
Съобщение от Node.js
/home/student/welcome.js:1
console.log("Добре дошъл в курса!"
^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: missing ) after argument list

Тук на първия ред липсва затварящата скоба. Преди да изпълни първия ред, Node.js прочита целия файл и проверява дали е написан по правилата на езика. Ако не е, спира и не изпълнява нищо, дори редовете преди грешката. Това се казва синтактична грешка (SyntaxError).

Идеята

Как се чете съобщението

Съобщението казва три неща: файла, реда и какво не е наред.

/home/student/welcome.js:1 значи файлът welcome.js (с пълния път до него), ред 1. Под него е самият ред, а знаците ^ подчертават мястото, където Node.js е забелязал проблема. После идва видът на грешката и какво не е наред: missing ) after argument list значи „липсва ) след нещата в скобите“.

Под съобщението Node.js печата още редове, които започват с at. Те казват къде вътре в самия Node.js е забелязана грешката. Засега ги пропускай.

Има и втори вид грешка. Програмата тръгва, изпълнява редовете един след друг и спира чак на реда, който не може да изпълни:

welcome.js
console.log("Добре дошъл в курса!");
Console.log("Започваме.");
Изход и съобщение
Добре дошъл в курса!
/home/student/welcome.js:2
Console.log("Започваме.");
^
ReferenceError: Console is not defined
Console с главна буква е име, което Node.js не познава (ReferenceError). Той го разбира едва когато стигне до този ред, затова първият ред вече е отпечатан. Отново пише файла и реда, а после видът на грешката.

Най-честите грешки в началото:

  • кавичка или скоба е отворена, но не е затворена (SyntaxError);
  • главна буква вместо малка: Console.log (ReferenceError, когато програмата стигне до реда).

Node.js показва само една синтактична грешка наведнъж. Поправяш я, пускаш пак и чак тогава виждаш следващата, ако има.

По-точно, за любопитните
  • Node.js казва къде е забелязал проблема. Понякога грешката е малко по-нагоре.
  • Има и грешки, които никой не хваща: програмата тръгва, но прави друго, не каквото искаш. Тях ще ловим в почти всеки урок.

Пробвай

Намери грешката

Програмата трябва да отпечата разписанието на изпита. Тя не тръгва: не излиза дори първият ред. На кой ред е грешката?

Избери реда с грешката.

Упражнение

Първите ти програми

Реши задачите в редактора си. Всяка е отделна програма. Сравни изхода си с примерния, знак по знак.

1. Hello World. Традиционната първа програма. Отпечатай:

Изход
Hello, World!

2. Визитка. Отпечатай визитка от три реда: име, професия и имейл. Може и твоите.

Примерен изход
Мария Иванова
уеб разработчик
maria@example.com

3. Рамка. Отпечатай днешното меню на столовата в рамка от звездички. Внимавай с интервалите, за да излезе дясната страна права.

Изход
**************
* Днес: супа *
* 5,40 € *
**************

Още задачи

  • Едно изречение на три части. С три команди process.stdout.write и една console.log отпечатай на един ред „Магазинът работи от 9:00 до 19:00.“
  • Разписание с коментар. Отпечатай разписание от четири часа. После изключи третия ред с //, без да го триеш, и добави коментар защо.
  • Нарочна грешка. Махни ; от някой ред в задача 1: програмата пак работи. После махни скоба, после кавичка, после напиши Console.log с главна буква. Прочети какво казва Node.js всеки път.

Тест

Провери се

1. Откъде започва изпълнението на програмата?
2. Каква е разликата между process.stdout.write("а") и console.log("а")?
3. Какво прави компютърът с коментара?
4. Node.js казва SyntaxError на ред 3. Какво значи това?
5. Кой ред ще отпечата Здравей?

Създаден от Иво Гергов като част от кампанията на Evo Tech за достъпно обучение по програмиране ·