Pierwszy program

Przed Tobą druga lekcja kursu C++, z której dowiesz się wreszcie, jak wygląda pisanie programów w języku C++ :-) Odpal teraz swoje ulubione środowisko i utwórz nowy projekt programu tekstowego. Jeśli w edytorze znajduje się już jakiś kod, skasuj go. Zaczniemy z pustym plikiem, który stopniowo będzie zapełniać się kodem. Będziemy tworzyć nasz program od podstaw, niczym doktor Frankenstein swojego potwora ;-D Początkowo program nie będzie jeszcze robił nic efektownego, jednak dzięki tym przykładom, które dokładnie omówię, będzie Ci łatwiej obczaić o co w tym całym progamowaniu chodzi :-)

Na początek wpisz [albo wklej] poniższy kod:

int main()
{
 //To jest komentarz
}

Komentarze

Na pewno od razu rzuciło Ci się w oczy, że pewien fragment wygląda tu zrozumiale. W języku C++ możesz umieszczać w kodzie programu fragmenty tekstu w "ludzkim" języku. Takie fragmenty to komentarze. Kompilator do nich nie zagląda, więc możesz w nich pisać co tylko chcesz ;-) Musisz tylko oznaczyć kompilatorowi gdzie komentarz się zaczyna, a gdzie kończy.

Komentarz liniowy, taki jak ten powyżej, zaczyna się znakami // i ciągnie się do końca linii. Istnieją także komentarze blokowe, które mogą obejmować dowolny fragment tekstu [nawet ciągnący się przez wiele linii]. Zaczynają się od /* i ciągną się aż do */. Przykład komentarza blokowego:

/* To jest komentarz, który
  ciągnie się przez wiele linii */

Komentarzy takich nie możesz zagnieżdżać, czyli umieszczać jeden w drugim. Dlaczego? Bo gdy kompilator napotka zakończenie tego wewnętrznego komentarza, to uzna, że komentarz właśnie się skończył. Znów zacznie pilnować czy nie robisz błędów i będzie bardzo zdziwiony, że nie piszesz w jego języku ;-P

Możesz się zastanawiać, po co Ci komentarze w twoim programie? Przecież jak piszesz program, to chyba wiesz o co w nim chodzi? :-P No tak, w tej chwili wiesz. Jednak wyobraź sobie, że za jakiś czas wracasz do swojego kodu chcąc coś poprawić. Patrzysz na te hieroglify i myślisz sobie: Co za kretyn to pisał?! :-D

Dobra, może nie każdy koduje po flaszce ;-D ale wystarczy już tydzień czy dwa żeby zapomnieć jak dokładnie działał Twój program. Wtedy masz jeszcze komentarz i nie musisz rozgryzać działania własnego kodu ;-) Możesz też zostawiać sobie notatki w kodzie, np. że coś musisz jeszcze poprawić lub dodać. Staraj się tylko nie przesadzać z dokładnością komentarzy. Nie pisz tego, co można wyczytać z samego kodu. Dobry kod jest zrozumiały sam w sobie ;-)

Komentarze przydają się też do innej rzeczy. Wiesz już, że kompilator nie zagląda do komentarzy. Co się stanie jak zamkniesz w znaki komentarzy jakiś fragment Twojego kodu? Zgadza się! Kod przestanie być kodem, a stanie się komentarzem. Ukryjesz go w ten sposób przed kompilatorem ;-) Tej sztuczki możesz używać, by wyłączać sobie wybrane fragmenty programu gdy testujesz jego działanie.

Ok, ale ludzki język już znasz, tego nie muszę Cię uczyć ;-) Wróćmy więc do poznawania języka C++. Zobaczmy co nam jeszcze zostało do omówienia w poprzenim przykładzie.

Najprostszy program

Oprócz komentarza, w naszym pierwszym programie jest jeszcze coś takiego:

int main()
{

}

Ten fragment to absolutne minimum. Każdy program w C++ musi zawierać conajmniej to.

Długo myślałem jak wytłumaczyć Ci ten pierwszy fragment kodu, gdyż łączy on w sobie wiele składników języka C++, które chciałoby się dokładniej omówić już teraz. W końcu postanowiłem, że zamiast na wjazd zawalać Cię informacjami, omówię wszystko po kolei, stopniowo odkrywając przed Tobą coraz więcej. Niektóre rzeczy omówię tylko w skrócie, dokładniejsze wyjaśnienia zostawiając na później.

Wszystko ma swój początek. Zacznijmy więc od niego! :-)

Bloki instrukcji

Każdy program to po prostu ciąg instrukcji. Instrukcje są jak zdania, a każde opisuje jedną prostą czynność, którą program ma wykonać. W starożytnych językach programowania pisało się program w postaci jednego długiego ciągu instrukcji, ciągnącego się jak spaghetti ;-P Szybko się okazało, że w takim kodzie łatwo się pogubić. Programiści zaczęli więc dzielić program na części.

W języku C++ taki wydzielony ciąg instrukcji, który stanowi jednolitą całość, nazywany jest blokiem. Blok zamyka się w nawiasy klamrowe, by wyraźnie określić jego początek i koniec. Wygląda to tak:

{
 //Tu jakieś instrukcje...
}

W programie może być oczywiście więcej bloków. Niektóre fragmenty kodu są na tyle przydatne, że programista chciałby ich używać wielokrotnie. Żeby jakoś rozróżniać bloki i ułatwić odwoływanie się do nich, programiści zaczęli nadawać im nazwy. Taki blok instrukcji, który ma swoją nazwę, nazywamy procedurą lub funkcją.

W niektórych językach programowania funkcja i procedura to dwie różne rzeczy: procedura to nazwany blok kodu, który można wielokrotnie wywoływać, natomiast funkcja dodatkowo może zwracać pewną wartość, tak jak funkcja matematyczna. W języku C++ nie ma takiego rozróżnienia. Jeśli jakiś blok kodu ma nazwę, to jest funkcją i już, nawet jeśli nic nie zwraca.

Gdy zamienisz jakiś blok kodu w funkcję, nadając mu nazwę, blok przestaje już być "anonimowy" i możesz odwoływać się do niego wielokrotnie, czyli wywoływać funkcję, posługując się jej nazwą ["Azor! Do nogi!" ;-D].

Funkcja główna

Jeśli jest kilka nazwanych bloków kodu [czyli funkcji], to od którego z nich program ma się zacząć wykonywać? Żeby rozwiązać ten problem, twórcy języka C++ umówili się, że każdy program będzie się zaczynał w funkcji o nazwie main [ang. main = główna. Czytaj mejn]. Jest to więc pierwsza funkcja, która wykona się w Twoim programie, i zarazem ostatnia. Można by rzec, że funkcja main jest Twoim programem ;-)

A oto jak wygląda owa funkcja main w całości:

int main()
{
 //Tu będą instrukcje
}

Jak widzisz, jest tutaj blok, a przed nim widać nazwę funkcji, czyli main. Po nazwie stoi dodatkowo para nawiasów okrągłych. W przyszłości w tych nawiasach znajdą się parametry dla Twojego programu. Narazie Twój program nie pobiera żadnych parametrów, bo żadnych nie potrzebuje, więc nawiasy są puste. Mimo to te nawiasy muszą tam być, bo właśnie po nich kompilator rozpoznaje, że chodzi Ci o nazwę funkcji.

W innych językach trzeba to było dodatkowo sygnalizować różnymi słowami kluczowymi, takimi jak function czy procedure. W C++ wystarczy para nawiasów po nazwie.

Tajemnicze int

Pewnie zastanawiasz się jeszcze, co robi to słówko int przed nazwą funkcji? ;-J

Otóż, gdy funkcja main się kończy, kończy się też program i oddaje sterowanie temu, kto go uruchomił [tym kimś może być system operacyjny lub inny program]. W tym momencie Twój program może dodatkowo zwócić informację o wyniku swojego działania [coś jak "testament" ;-D]. Może to być np. wynik obliczeń, informacja czy program się powiódł czy nie... możliwości jest wiele. Zbyt wiele! Dlatego ustalono, że wynikiem programu ma być zawsze jakaś pojedyncza liczba. Jeśli tą liczbą jest 0, oznacza to umownie, że program przebiegł prawidłowo. Każdy inny wynik oznacza, że program zakończył się z powodu błędu. Wtedy różne wartości oznaczają różne kody błędów.

Słowo kluczowe int oznacza właśnie, że wynikiem funkcji main [a więc zarazem Twojego programu] ma być liczba całkowita. A teraz zastanów się: jaką liczbę zwraca ten Twój pierwszy program? :->

Pytanie trochę podchwytliwe, bo nie ma tu żadnej liczby :-D Jednak nie ma też narazie żadnych instrukcji, jedynie pusty blok funkcji main, więc program po prostu zakończy się od razu po uruchomieniu. Skoro nic nie może pójść źle, to wynikiem programu powinno być 0 i postara się o to sam kompilator.

Sprawdź teraz, czy tak jest naprawdę. Skompiluj ten pierwszy program i uruchom go. Jeśli Twoje środowisko programistyczne pozwala Ci zobaczyć wynik działania programu, to świetnie :-) [takim środowiskiem jest na przykład Code::Blocks]. Jeśli nie - no cóż, musisz uwierzyć mi na słowo ;-P

No dobrze, a co zrobić, by program zwrócił jakąś inną wartość?

Zwracamy wartość, czyli pierwsza instrukcja

Odpowiedź brzmi: musisz napisać w programie, by to zrobił. On sam się tego nie domyśli :-D Komputer jest jak Dżin z lampy - potrafi jedynie spełniać życzenia programisty ;-) Jednak nie kiwnie palcem, dopóki mu nie każesz. Usiądź teraz wygodnie, bo właśnie napiszesz swoją pierwszą instrukcję :-) Wywal z poprzedniego kodu ten komentarz i w jego miejsce wstaw coś takiego:

 return 7;

Cały program powinien teraz wyglądać tak:

int main()
{
  return 7;
}

W języku C++ każda instrukcja kończy się średnikiem. Jest tak dlatego, że C++ nie zmusza Cię do umieszczania jednej instrukcji w jednej linijce. Możesz rozpisać jedną instrukcję nawet w kilku linijkach, jeśli tak jest bardziej przejrzyście. Jest tak dzięki temu, że to średnik [a nie koniec linijki] mówi kompilatorowi, w którym dokładnie miejscu instrukcja się kończy. Możesz nawet zapisać cały Twój program tak:

int main(){return 7;}

jednak widzisz chyba, że wygląda to jak jakieś łokoczoko ;-) Kompilator to zrozumie, ale człowiek zbaranieje na widok czegoś takiego :-D Dlatego warto układać program w wielu linijkach, dodając dodatkowe odstępy i wcięcia. Wtedy program staje się czytelniejszy.

Jest też drugi powód, by tak robić - używanie debuggera. Debugger to narzędzie, które pozwala Ci śledzić wykonanie programu krok po kroku i pokazuje, w której linijce aktualnie się zatrzymał. Jeśli będzie to wciąż jedna i ta sama linijka, to nie wyczujesz, którą aktualnie instrukcję twój program wykonuje :-P

Dobra ale wróćmy do tego return. Słowo kluczowe return w tej instrukcji oznacza, że chcemy zakończyć funkcję. Tuż po nim stoi liczba 7 i to ona będzie zwrócona jako wynik Twojego programu. Dokładniej o słowie kluczowym return opowiem w lekcji poświęconej funkcjom.

Tak więc pierwsze starcie z C++ masz już za sobą :-) Możliwe że budzi się już w Tobie ciekawość czego możesz się dowiedzieć z następnej lekcji ;-) Jednak zanim do niej przeskoczysz, spróbuj powstrzymać się jeszcze chwilę i skompiluj ten program by sprawdzić, czy naprawdę jego wynikiem będzie 7 ;-D


Subskrybcja

Buttony
Button1 Button2 Button3 Button4 Button5 Button6 Button7 Dodaj swój button