Първата програма
Проблем
Компютърът прави точно каквото пише
Компютърът не се досеща какво искаш. Изпълнява команди, една след друга, точно както са написани. Поредицата от такива команди е програма.
Ето цяла програма. Тя отпечатва два реда на екрана:
console.log("Добре дошъл!");console.log("Това е първата ти програма.");Добре дошъл!Това е първата ти програма.Това е цялата програма: два реда, по една команда на ред. Няма обвивка около тях. Записваш ги във файл hello.js и го пускаш.
Идеята
Какво има в програмата
- Програмата е самият файл. Изпълнява го Node.js: програмата, която пуска JavaScript извън браузъра. Тя минава през редовете отгоре надолу, от първия до последния.
console.log(...)отпечатва текста в скобите и минава на нов ред.- Текстът е в двойни кавички:
"Добре дошъл!". Кавичките не се печатат. - Всяка команда завършва с
;. JavaScript често се справя и без него, но ние го пишем винаги: така се вижда къде свършва командата.
Програмата се пуска от терминала, в папката на файла:
node hello.jsNode.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("Доставка: утре");Стъпка по стъпка, с думи
- process.stdout.write печата „Поръчка “ и курсорът остава на същия ред.
- process.stdout.write печата „№1024“ и курсорът остава на същия ред.
- console.log печата „ е приета.“ и курсорът минава на нов ред.
- console.log печата „Доставка: утре“ и курсорът минава на нов ред.
- Интервалите са вътре в кавичките: компютърът не слага интервал сам.
По-точно, за любопитните
process.stdout е изходът на програмата в Node.js. В браузъра го няма: там текстът за един ред се събира и се печата наведнъж с console.log.
Пробвай
На колко реда?
Какво ще отпечата програмата?
process.stdout.write("Влак ");console.log("8:15");process.stdout.write("Перон ");process.stdout.write("3");console.log();След „8:15“ има console.log, затова „Перон“ е на нов ред. Последният ред 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 История"); // после е обядВторият ред е коментар целият, затова „Физика“ не се печата. На третия ред коментарът започва след `;`: командата се изпълнява, а бележката след // се пропуска.
Проблем
Програмата не тръгва
Написал си програмата, пускаш я, а тя дори не започва. Не излиза нито един ред. Вместо изход получаваш съобщение:
console.log("Добре дошъл в курса!"console.log("Започваме.");/home/student/welcome.js:1console.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 е забелязана грешката. Засега ги пропускай.
Има и втори вид грешка. Програмата тръгва, изпълнява редовете един след друг и спира чак на реда, който не може да изпълни:
console.log("Добре дошъл в курса!");Console.log("Започваме.");Добре дошъл в курса!/home/student/welcome.js:2Console.log("Започваме.");^
ReferenceError: Console is not definedConsole с главна буква е име, което Node.js не познава (ReferenceError). Той го разбира едва когато стигне до този ред, затова първият ред вече е отпечатан. Отново пише файла и реда, а после видът на грешката.Най-честите грешки в началото:
- кавичка или скоба е отворена, но не е затворена (SyntaxError);
- главна буква вместо малка:
Console.log(ReferenceError, когато програмата стигне до реда).
Node.js показва само една синтактична грешка наведнъж. Поправяш я, пускаш пак и чак тогава виждаш следващата, ако има.
По-точно, за любопитните
- Node.js казва къде е забелязал проблема. Понякога грешката е малко по-нагоре.
- Има и грешки, които никой не хваща: програмата тръгва, но прави друго, не каквото искаш. Тях ще ловим в почти всеки урок.
Пробвай
Намери грешката
Програмата трябва да отпечата разписанието на изпита. Тя не тръгва: не излиза дори първият ред. На кой ред е грешката?
Избери реда с грешката.
); за част от текста и стига до края на реда без затваряща кавичка: SyntaxError: Invalid or unexpected token („неочакван знак“). Затова не излиза дори „Час: 10:30“ от ред 1. Поправката е console.log("Зала: 204");.Упражнение
Първите ти програми
Реши задачите в редактора си. Всяка е отделна програма. Сравни изхода си с примерния, знак по знак.
1. Hello World. Традиционната първа програма. Отпечатай:
Hello, World!2. Визитка. Отпечатай визитка от три реда: име, професия и имейл. Може и твоите.
Мария Ивановауеб разработчикmaria@example.com3. Рамка. Отпечатай днешното меню на столовата в рамка от звездички. Внимавай с интервалите, за да излезе дясната страна права.
*************** Днес: супа ** 5,40 € ***************Още задачи
- Едно изречение на три части. С три команди
process.stdout.writeи еднаconsole.logотпечатай на един ред „Магазинът работи от 9:00 до 19:00.“ - Разписание с коментар. Отпечатай разписание от четири часа. После изключи третия ред с
//, без да го триеш, и добави коментар защо.
- Нарочна грешка. Махни
;от някой ред в задача 1: програмата пак работи. После махни скоба, после кавичка, после напишиConsole.logс главна буква. Прочети какво казва Node.js всеки път.
Тест