Podstawowe elementy w językach programowania - Programowanie jest łatwe

Opisane w tym artykule elementy występują w każdym języku programowania czy języku skryptowym. Stanowią podstawę mechanizmów, które pozwalają na sterowanie przepływem informacji.

Entre les trous de la memoire, Dominique Appia

Poniżej znajdziesz uproszczone i mocno skondensowane wyjaśnienia pojęć, z którymi obcować będziesz za każdym razem, gdy będziesz programować. Każdy z akapitów tego artykułu można rozszerzyć do rozmiarów rozdziału a niekiedy do całej książki.

Komentarze

Podczas pisania kodu często znajdziemy się w sytuacji, gdy będziemy chcieli coś zaznaczyć dla samych siebie, niekoniecznie chcąc aby to co napiszemy było przedmiotem pracy dla kompilatora. W takich przypadkach stosujemy komentarze. W Języku C posiadamy ich dwa rodzaje komentarzy. Wszystko co mieści się w komentarzu jest ignorowane przez kompilator, cokolwiek by tam nie było. Pierwszy rodzaj komentarza to komentarz liniowy, używamy do tego celu znaków //. Wszystko co znajdzie się za takim znakiem, w tej samej linii, zostanie przez kompilator pominięte (a nasze oprogramowanie, w którym piszemy kod specjalnie podkreśli tekst, który jest komentarzem). Drugi rodzaj komentarza to komentarz blokowy. W przeciwieństwie do poprzedniego różni się tym, że komentarzem jest objęte wszystko co znajduje się pomiędzy jego początkiem i końcem. Początek komentarza oznaczamy jako /* a koniec odwrotnością */.

Dane

Każdy język, w tym C, wyposaża programistę w kilka typów prostych. Są to przeważnie:

Dodatkowo C wyposaża nas w typy:

Tworząc zmienną danego typu automatycznie alokujemy jej miejsce w pamięci. Oczywiście to miejsce zostanie zarezerwowane w pamięci dopiero, gdy uruchomimy nasz program.

Każda zmienna ma swoją nazwę (etykietę). Zaklinam Cię- nazwa zmiennej jest szalenie ważna. Zawsze nadawaj zmiennej najlepszą dla niej nazwę tak, aby po powrocie do kodu, który piszesz, po jakimkolwiek czasie bezbłędnie odczytać jej znaczenie. Czasami bywa tak, że programista dłużej zastanawia się nad nazwą zmiennej niż pisze algorytm, który z niej korzysta. Wszystkie nazwy zmiennych mają znaczenie. Zapis do tworzenia zmiennych w C wygląda następująco: określamy typ zmiennej i jej etykietę. Taki zapis nazywamy deklaracją zmiennej. Przed użyciem jakiejkolwiek zmiennej czy funkcji należy ją wcześniej zadeklarować! Użycie etykiety, która nie została zadeklarowana zakończy się błędem kompilacji. Każdą etykietę (nazwę) można zadeklarować tylko raz- jest ona unikalna w ramach swojego zasięgu.

Możemy także nadać od razu wartość takiej zmiennej czyli ją zainicjalizować. Pierwsze nadanie konkretnej wartości zmiennej nazywamy inicjalizacją zmiennej. Może wystąpić sytuacja, w której zmienna jest zadeklarowana (czyli można jej użyć) ale nie jest zdefiniowana. Niezdefiniowana zmienna ma nieokreśloną wartość- po prostu jest umieszczona pod konkretnym adresem w pamięci i nie wiadomo co tam się znajduje, może to być coś co było wcześniej albo cokolwiek innego. Dla nas to po prostu śmieć w pamięci dlatego dobrze jest od razu inicjalizować zmienne wartościami.

// -------------------------------------------------------
int speed = 0;
// -------------------------------------------------------

Powyżej zadeklarowałem zmienną speed typu int i zainicjalizowałem ją wartością 0. Ponieważ składnia języka C (jego słowa kluczowe) jest napisana w języku angielskim zalecam używania anglojęzycznych etykiet dla lepszej czytelności.

Wyobraźmy sobie taką sytuację:

// -------------------------------------------------------
int speed = 0;
int base_speed;
speed  = speed + base_speed;
// -------------------------------------------------------

Ponieważ nie zainicjalizowałem zmiennej base_speed (nie nadałem jej wartości), jej wartość jest nieokreślona i wynik dodawania będzie nieokreślony.

Kontrola typów

Język C ma ścisłą kontrolę typów, to znaczy, że umieszczając wartość do zmiennej, ta wartość musi być takiego samego typu jak zmienna, do której chcemy ją przypisać. Gdybyśmy mieli następującą sytuację:

// -------------------------------------------------------
int speed = 3.14;
// -------------------------------------------------------

Kompilator ostrzeże nas, że przypisujemy wartość zmiennoprzecinkową do zmiennej typu int (liczb całkowitych). Kompilacja raczej się powiedzie a wartość 3.14 zostanie skrócona do jej całkowitej wartości. Nie ma dramatu jednak co się stanie, gdy użyjemy wartości 1.99? Czy mamy pewność w jaki sposób ta wartość zostanie zamieniona na liczbę całkowitą? Czy kompilator ją zaokrągli? A może tylko usunie jej część ułamkową?

Operatory

Do dyspozycji posiadamy kilka grup operatorów, które pozwalają nam na wykonanie operacji na typach prostych.

Operacje arytmetyczne

Takie operacje opisujemy za pomocą znaków:

Operatory przypisania

Aby nadać wartość zmiennej należy przypisać do niej wartość. Możemy to zrobić na kilka sposobów. Najprostszy to użycie operatora przypisania =. Dla skrócenia zapisu, możemy użyć następujących operatorów:

Operatory logiczne

Za pomocą operatorów logicznych możemy uzyskać informację prawda/fałsz. Np. Możemy sprawdzić czy coś jest większe od czegoś innego, czy ma taką samą wartość, etc. W języku C coś jest prawdą jeżeli posiada wartość niezerową. Np.

// -------------------------------------------------------
int a = 1;
int b = 0;
// -------------------------------------------------------

W tym przypadku a jest prawdziwe a b fałszywe.

a && b; // fałsz a && c; // prawda

Uwaga. Sprawdzanie odbywa się tak długo dopóki każdy kolejny operand jest prawdziwy. W przypadku, gdy pierwszy napotkany operand (np. ```a```) jest fałszywy, operator zwróci fałsz i nie będzie sprawdzać kolejnych operandów. Ma to ogromne znaczenie, gdy zamiast operandów użyjemy funkcji. Wtedy te kolejne funkcje po prostu się nie wykonają.

- **||** Alternatywa, operator zwraca prawdę gdy co najmniej jeden operand jest prawdziwy. **Uwaga**. Sprawdzanie odbywa się dopóki pierwszy napotkany operand jest prawdziwy. W przypadku gdy sprawdzany operand jest fałszywy wtedy następuje sprawdzenie kolejnego.
- **!** Negacja, daje wartość odwrotną. Np.  

```c
int a = 1;
int b = 0;

a > b; // prawda
!(a < b); // fałsz

Dodano: 2018-01-19 06:18 przez Piotr Poźniak

podręcznik , języki programowania , komentarze , operatory , operator logiczny , operator arytmetyczny , operatory przypisania , dane , zmienne , operandy , int , float , char , void , deklaracja , definicja ,
Piotr Poźniak
O autorze:

Programuję od ponad 15 lat. Prowadzę software house. Angażuję i zachęcam wszystkich do programowania w ramach inicjatywy Programowanie jest łatwe.