Ogólnie

 

Każdy program ma swoją strukturę. Dzięki niej wiemy w jakiej kolejności wykonuje się kod i co za co odpowiada. Weźmy na warsztat kilka języków programowania i przykładowe programy w nich napisane.

BASIC

 

Programy w BASIC-u składają się z kolejno wykonywanych instrukcji, które zebrane są w wiersze. Wszystkie dialekty oprócz najprymitywniejszych dopuszczają kilka instrukcji w jednym wierszu, rozdzielonych zazwyczaj znakiem dwukropka. Starsze wersje wymagały numerowania wierszy (maksymalny numer wynosił zwykle 9999, 16384, 32767, czasami 65535 co miało miejsce w Meritum).

Zmienne mogą mieć dowolnie długie nazwy zaczynające się od litery. Nazwy zmiennych łańcuchowych zakończone są znakiem dolara, np. x$, zmienna$. Tablice mogą mieć dwa lub więcej wymiarów (w niektórych dialektach tablice znakowe służą do wskaźnikowego dostępu do łańcuchów, jak w C).

BASIC w sprowadzonej do wspólnego mianownika wersji posiada bardzo proste mechanizmy sterowania przebiegiem programu - instrukcję skoku bezwarunkowego GOTO, wywołania podprogramu GOSUB (kończonego instrukcją RETURN) oraz warunkową IF..THEN (oraz ELSE w niektórych dialektach). Za pomocą konstrukcji FOR..NEXT można powtarzać określone fragmenty programu w pętli iteracyjnej.

10 PRINT "Witaj"
20 INPUT "Ile gwiazdek mam wydrukowac"; ile
30 PRINT "*";
40 LET ile = ile -1
50 IF ile > 0 THEN GOTO 30
Powyższy program to klasyczny, niestrukturalny BASIC. Linie są w nim numerowane a pętle uzyskuje się używając instrukcji skoku GOTO. Duża liczba skoków powodowała, że kod wczesnego BASIC-a był często trudny do odczytania i zrozumienia, powstał nawet termin spaghetti code określający taki sposób tworzenia programów.

C

 

Program w języku C składa się ciągu funkcji. Jedna funkcja jest wyróżniona i nosi nazwę main. Pełni ona rolę programu głównego w innych językach. Od niej zawsze zaczyna się wykonywanie programu.

Poniżej przedstawiono przykład prostego programu w języku C:

/* Program wyświetla komunikat na ekranie */
#include <studio.h>
main () {
	printf(„c – kolejny jezyk programowania \n”);
}
Pierwszy wiersz jest komentarzem opisującym działanie programu. Komentarz rozpoczyna się znakami /* i kończy znakami */. Może on być umieszczony w dowolnym miejscu programu.

Przedstawiony program składa się z jednej funkcji. W tym wypadku musi to być funkcja o nazwie main. Bezpośrednio po nazwie funkcji umieszczona jest lista jej parametrów ujęta w nawiasy. Parametr reprezentują wartości, które mogą być przekazane do funkcji. Jeżeli funkcja nie spodziewa się żadnych danych, zaznaczane jest to pustą listą ().

Instrukcje wchodzące w skład funkcji ograniczone są nawiasami klamrowymi {}. Każda pojedyncza instrukcja zakończona jest znakiem średnika (;).

Python

 

Cechą wyróżniającą Pythona spośród innych języków jest stosowanie wcięć do wydzielania bloków kodu. Jest to cecha unikalna wśród powszechnie stosowanych języków programowania, jako pierwsza rzucająca się w oczy programistom nie piszącym w Pythonie.

W językach programowania wywodzących strukturę blokową od Algola (niekoniecznie bezpośrednio) – np. Pascalu, C, czy Perlu – bloki kodu zaznaczane są klamrami lub słowami kluczowymi (C i Perl używają { }, Pascal używa begin i end). Jednakże we wszystkich tych językach programiści tradycyjnie stosują wcięcia by wyróżnić bloki w otaczającym kodzie.

Natomiast Python dziedziczy cechę mniej znanego języka ABC – zamiast interpunkcji czy słów kluczowych używa samych wcięć do zaznaczania bloków. Wyjaśnić to można na prostym przykładzie zamieszczonym poniżej. Przedstawiona jest w nim funkcja licząca silnię w C i w Pythonie:

silnia w C:

int silnia(int x) {
    if (x == 0) return 1;
    else return x * silnia(x-1);
}

silnia w Pythonie:

def silnia(x):
    if x == 0:
        return 1
    else:
        return x * silnia(x-1)
Dla niektórych programistów przyzwyczajonych do języków stylistycznie wzorowanych na Algolu, gdzie spacja nie ma znaczenia składniowego, może to być mylące. Spotyka się czasem niepochlebne porównanie do sztywnego systemu kolumnowego stosowanego w czasach fortranowych kart perforowanych.

Istotnie, w swoim czasie możliwość stosowania zapisu, w którym decydujące były jedynie symbole, była dużym postępem. Jednak dla programistów piszących w Pythonie stosowanie składniowo znaczących wcięć jest po prostu przedłużeniem konwencji, która i tak jest stosowana np. w C. Zwolennicy tego języka zwracają także uwagę na wadę "swobodnej" składni, polegającą na tym, że skoro wcięcia kodu są ignorowane, nie można wymusić jednej dobrej konwencji (stąd też konflikty między programistami, tzw. indentation wars). Nieprawidłowo wcięty kod może być mylący, gdyż czytający go programista i kompilator mogą go różnie zinterpretować.

Java

 

W Javie każdy program posiada pewną sztywną strukturę. Nie proszę, abyś ją zrozumiał (jeszcze nie teraz), ale żebyś po prostu zapamiętał ją i przyjął, że taka jest (z czasem wszystko stanie się dla Ciebie jasne).

 public class NazwaPliku {
   public static void main (String [] args) {
   }
 }
Jeżeli chciałbyś uruchomić ten program, musiałbyś go zapisać w pliku NazwaPliku.java. Po prostu w miejscu gdzie widnieje NazwaPliku musisz wpisać nazwę pliku, w którym zapisujesz swój program.

Dobrym nawykiem jest pisanie nazwy klasy wielką literą. Nazwa pliku z kodem musi być taka sama jak nazwa klasy. W tym przypadku to "Pusty", a plik, w jakim zapiszemy kod, to Pusty.java.

Ponieważ w języku Java wszystko jest obiektem, również program musi być reprezentowany jako klasa. JRE proszone o uruchomienie pliku, wywołuje domyślnie metodę main klasy, o nazwie identycznej z nazwą pliku. Jeżeli w pliku nie znajduje się klasa o tej samej nazwie zostanie zwrócony błąd. Wszystko, co znajduje się w metodzie main, to właśnie nasz program. Ponieważ nigdzie nie jest tworzony obiekt naszej klasy, metoda main musi być statyczna, aby można było ją wywołać bez tworzenia instancji klasy (czyli bez tworzenia obiektu). Nakłada to na nas pewne ograniczenia - na przykład nie możemy korzystać z this (nie ma ono żadnego sensu w metodzie statycznej). Metodą pozwalającą ominąć ten problem jest stworzenie obiektu w metodzie main i przeniesienie kodu do konstruktora:
 public class Pusty {
   public Pusty() {
     // Tutaj kod programu
   }
 
   public static void main(String [] args) {
     new Pusty();
   }
 }
Powyższy kod tworzy obiekt klasy, którą projektujemy - dzięki temu ograniczenia związane z pisaniem kodu w metodzie statycznej znikają. Zastanawiać może jeszcze fragment kodu String [] args - jest to nic innego jak przekazanie do programu listy (tutaj tablicy) stringów (łańcuchów znaków czy jak wolisz napisów), będących parametrami wywołania Twojego programu. To właśnie poprzez zmienną args (arguments) otrzymujesz dostęp do wszystkich parametrów z jakimi została uruchomiona twoja aplikacja. Przekazanie parametrów od wersji Java SE5 może wyglądać również tak:
 public static void main(String ... args) {