Koncepcje programowania/Zmienne

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania

Zmienne[edytuj]

Tak, jak nasz świat składa się z atomów, tak świat komputerów składa się z informacji. I każdy program potrzebuje sposobu na ich przechowywanie. Na przykład, program który mnoży dwie liczby, więc potrzebuje przechować 3 różne elementy: pierwszą liczbę, drugą liczbę oraz wynik mnożenia. I do tego właśnie służą zmienne. Zmienna jest swego rodzaju pojemnikiem, miejscem w pamięci komputera, które zostało odpowiednio nazwane i przechowuje jakąś wartość. Jest zmienną ponieważ może zmieniać swoją wartość. Jak na przykład gra, która może przechowywać nasz aktualny wynik (score).

Wymyślmy jakiś pojemnik o nazwie x. Możemy w nim coś schować - na przykład liczbę 98. Gdybyśmy mielibyśmy to zapisać w Pythonie, użylibyśmy polecenia x = 98 co oznacza, że stworzyliśmy zmienną o nazwie x, której nadaliśmy wartość 98.

x = 98

spacje nie są potrzebne ale zostały dla zachowania czytelności.
Pamiętaj że w wielu innych językach programowania, do utworzenia zmiennej może być potrzebne słowo kluczowe, jak np. w języku JavaScript:

var x;

i spacja w środku jest obowiązkowa. Zauważ też że nie mamy tu przypisanej zmiennej, bo nie jest potrzebna, słowo kluczowe w tym wypadku mówi komputerowi, że to jest zmienna, bo w przeciwieństwie do języków opartych o C, zmienne w Pythonie są deklarowane w sposób niejawny. Przypisanie zmiennej w Pythonie wartości jest równoznaczne z jej utworzeniem.

Istnieją także reguły co do tworzenia nazw zmiennych. W Pythonie:

  • nazwy zmiennej mogą być dowolnej długości.
  • Mogą one zawierać litery i cyfry, ale muszą się rozpoczynać od litery lub podkreślenia (_).
  • Można stosować duże litery, natomiast pamiętaj że X i x, będą różnymi zmiennymi. Zostanie to omówione dokładniej pod koniec rozdziału.

Prawidłowe nazwy zmiennych:

name = 2
jid = 2
score = 2
OrderNumber = 2
a;

Czego natomiast nie wolno robić?

  • Zmienna w swej nazwie nigdy nie może zawierać spacji. - można zamiast nich, użyć znaku podkreślenia który może nam ją zastąpić.
  • Używać jakichkolwiek nazw ze zbioru słów zastrzeżonych języka programowania którym się posługujesz. Zbiór ten zawiera operatory, które stanowią reguły składniowe i strukturę języka przez co nie mogą być używane jako zmienne.
  • Znaków specjalnych (jak wykrzykniki, znaki dolara czy inne znaki procentów)

Nieprawidłowe nazwy zmiennych:

%name!; = 2
log in = 2
100kolumn = 2
class = 2

Początkujący programiści często mylą pojęcia „zrozumiałe dla człowieka” z „zrozumiałe dla komputera”. Skutkuje to błędnie interpretowanymi znaczeniami zmiennej, tzn. średnia nie jest utożsamiana w żaden sposób z działaniem matematycznym o tej nazwie, a zmienna o nazwie pi, nie oznacza że posiada wartość 3.14159. Komputer w żaden sposób nie przydziela znaczeń semantycznych do zmiennych.

Typowanie silne i słabe[edytuj]

Zmienne mogą przechowywać dane rożnego typu. Przykłady:

  • Integer - liczby całkowite
  • Float - liczby zmiennoprzecinkowe
  • String - ciągi znaków
  • Boolean - wartości typu prawda/fałsz

Typowanie silne - Musisz z góry wiedzieć jakiego typu wartości będzie przechowywać zmienna. Czyli nie wystarczy podać nazwy dla tej zmiennej, trzeba jeszcze określić jakiego typu dane ta zmienna będzie mogła przechowywać. Każde wyrażenie ma ustalony typ i nie można go używać w kontekście przeznaczonym dla innych typów.

Przykład w języku C++

 int liczba = 1;
 if ("1" == liczba) { // błąd podczas kompilacji, ponieważ "1" to typ tekstowy (string), zatem nie jest liczbą (int)
 }

Nie da się tego później zmienić, nie można przypisać niewłaściwego typu danych do zmiennej. Nie możesz na przykład przypisać zmiennej która przechowuje wartości prawda/fałsz do zmiennej która przechowuje liczby i tym podobne. Jest to wymuszone, jeśli jest zmienna typu tekst, to tylko tekst może być w nim przechowywany.

Typowanie słabe - każda zmienna może przyjąć wartość dowolnego typu. Czyli wystarczy podać jej nazwę, nie musisz deklarować jakiego typu wartości ma zamiar przechowywać. Czyli może to być najpierw liczba, do tej samej zmiennej możesz przypisać później tekst i tak dalej. Czyli koncepcja całkiem podobna do zmiennych, gdzie jedna zmienna może przechowywać wiele różnych wartości, tak w typowaniu słabym, każda zmienna może przechowywać wiele rożnych typów. Nie masz co prawda wówczas pewności że wartość zmiennej jest właściwego typu ale można łatwo to naprawić, stosując specjalny operator porównania, który sprawdza czy oba argumenty są tego samego typu i mają tę samą wartość.

Przykład w języku JavaScript:

var jabłka=1.43;
var pomarańcze=2.33;
var gruszki=4.32;
var podatek=.04;
var wysyłka=2.75;
var subtotal=jabłka + pomarańcze + gruszki;
var wszystko=subtotal + (subtotal * podatek) + wysylka;
var wiadomosc="Your total is $";
var dostawa= wiadomosc + wszystko +".";
document.write(dostawa);

Przykład w języku PHP:

$liczba = 1;
if ("1" == $liczba) {
  // mimo porównywania z tekstem, warunek jest prawdziwy, ponieważ liczba jest rzutowana na typ string
}

Typowanie statyczne – nadawanie typów zmiennym w czasie kompilacji programu.

Przykład w języku C++

int i = 42;
i = "test";

Kompilator zwróci błąd, ponieważ wcześniej zdefiniowali do zmiennej liczbę a potem chcieli do tej samej zmiennej przypisać tekst.

Typowanie dynamiczne to przypisywanie typów do wartości przechowywanych w zmiennych w trakcie działania programu

Język Python w którym pracujemy, jest silnie, dynamicznie typowany. Co oznacza dynamicznie? Oznacza to, że obiekty (wartości) środowiska wykonawczego mają typ, w przeciwieństwie do typowania statycznego, w którym zmienne mają typ. Innymi słowy chociaż zmienna nie może przyjąć wartości dowolnego typu, to może je zmieniać w trakcie wykonywania programu. Przykład:

Integer[edytuj]

x = 2
x = -2
x = 100
x = 3.16
print(x)

Python nie wyrzuci komunikatu błędu tak jak to było w C++, mimo faktu że pomieszali liczby całkowite z liczbą zmiennoprzecinkową. Natomiast, dlaczego po jego wykonaniu pojawia się 3.16? Jest to wartość zmiennej x która znajduje się na końcu. W programach zawsze wszystko wykonuje się od początku, do końca, od góry do dołu, więc Python pokaże najświeższą wartość zmiennej.

String[edytuj]

Dane które w programowaniu określa się jako string (łańcuchy znaków). Przykład:

'Hello world'

Często używa się także cudzysłowów, można się także spotkać z apostrofami jak w powyższym przykładzie - w przypadku Pythona, obie metody są jak najbardziej poprawne, ale może się zdarzyć iż konkretne języki programowania mogą wymagać tylko apostrofu bądź tylko cudzysłowu. Ale nigdy nie wolno tego stosować mieszając jeden z drugim, czyli dając apostrof na końcu i cudzysłów na końcu lub odwrotnie, trzeba używać ich konsekwentnie.

Stringi, posiadają także swoje właściwości. Przykład:

len("Programowanie komputerów")

Wypisze, ile znaków posiada ww. string, w tym wypadku 24.

Operatory[edytuj]

Operatory to specjalne konstrukcje które pozwalają wprowadzić jakieś zmiany do zmiennej. Jeśli dotrwałeś do tego momentu to jeden z nich już dobrze znasz, czyli Operator przypisania

liczba = 20

Jest to chyba najczęściej wykorzystywany operator w programowaniu. Za jego pomocą, jak sama nazwa wskazuje, przypisujemy (wrzucamy) jakąś wartość do zmiennej. W powyższym przykładzie, mamy zmienną "liczba" i za pomocą znaku równości, pozwala wstawić liczbę bądź inną wartość jakiej potrzebujemy.

Operatory arytmetyczne:

OPERATOR OPIS UŻYCIE
+ Suma, symbol dodatni x + y
- Różnica, symbol ujemny x - y
* Iloczyn x * y
/ Iloraz x / y
% Modulo – reszta z dzielenia x % y
// Dzielenie całkowite x // y
** Potęga x ** y

Przykład w języku Python:

a = 3
b = 5
print(a + b)

Oczywiście, kolejność wykonywania działań obowiązuje zgodnie z obecną konwencją matematyczną.

Kombinowane operatory:

Zwiększanie wartości zmiennej:

liczba = liczba + 10

lub

number += 10

Rezultat będzie dokładnie taki sam, do bieżącej wartości zmiennej "liczba", dodajemy wartość 10. Jedyna różnica jest taka że jest to zapis w bardziej skróconej formie.

Operatory inkrementacji i dekrementacji

x++
x--

Nie robią nic innego jak zwiększanie, bądź zmniejszanie wartości o 1. Bardzo często przydatny operator wykorzystywany w programowaniu. Wyobraź sobie np. człowieka grającego w grę który przechodzi kolejne poziomy gry albo zużywającą się amunicję. Python w którym pracujemy, niestety go nie posiada, więc musisz użyć wcześniej wymienionego, operatora kombinowanego += 1 bądź -= 1. Z kolei w JavaScipt, ww. operator jak najbardziej istnieje. Mała uwaga: x w nazwie, nie jest częścią operatorów inkrementacji i dekrementacji, to nazwa zmiennej, ale został tu podany by móc łatwo zrozumieć, w jaki sposób się go wstawia do programu. Po prostu do zmiennej którą chcemy zwiększyć bądź zmniejszyć o 1, dodajemy bez odstępów, dwa plusy bądź dwa minusy, dwie poziome kreski.

Białe znaki[edytuj]

Każdy tekst, ma jakieś odstępy i to są właśnie te białe znaki, jak np. spacje, tabulatory, przejście do nowej linii, innymi słowy takie znaki, których nie widać.

Odstępy pomiędzy liniami, w większości języków programowania nie będą stanowiły problemu, zarówno w JavaScript i Python. Możesz sobie wstawić z 5-10 odstępów i taki kod zadziała prawidłowo. Odstępy w pionie, te dodatkowe linie, nie będą miały znaczenia, one tylko mogą zmniejszyć czytelność kodu czyli będą miały wpływ na nas, nie na komputer.

W przypadku JavaScript można te odstępy, zlikwidować. Na przykład zamiast napisać kod w ten sposób:

var x = 1;
var y = 2;
var z = 3;

napisać go tak:

var x = 1; var y = 2; var z = 3;

I to też nie będzie miało wpływu na działanie programu. Wyjątkiem jest tu Python. Dlaczego? Jak już wspominałem na wstępie, w poprzednim rozdziale, znacznik ; nie jest w nim wymagany. Python do kończenia polecenia używa właśnie białego znaku - przejścia wiersza do nowej linii. Dlatego tam nie można czegoś takiego zrobić. Skutkiem ubocznym jest oczywiście wymuszenie ładnego formatowania kodu, co jest bardzo dobre dla nas, programistów.

Teraz odstępy w poziomie czyli spacje. Na przykład tutaj:

x = 2

mamy zmienną, operator przypisania oraz wartość. Spacje pomiędzy znakami znaku równości nie mają znaczenia, zarówno w JavaScript i Python.

Natomiast, jeśli używamy słów kluczowych, takich jak class w python albo var w javascript i nie wstawimy tam spacji, to taki kod nie będzie działał prawidłowo. Bo zarówno python jak i JavaScript, nie będzie wiedział co to znaczy classx albo varx. Nie można tego odstępu zlikwidować. Analogicznie w sytuacji wstawiania spacji w słowie kluczowym var bądź class. W obu językach, żadna odmiana tych słów nie będzie poprawnie interpretowana. Analogicznie z operatorami kombinowanymi jak operatory inkrementacji bądź mniejszości (>=). Tam też nie wolno wstawić spacji, bo wtedy nie będzie już kombinowanym operatorem tylko dwiema zupełnie różnymi operatorami.

Jeśli chcielibyśmy wstawić białe znaki na początku jakiegoś polecenia, interpreter JavaScript nie będzie miał z nimi problemów, natomiast w języku Python pełnią kluczową rolę do implementacji dużo bardziej skomplikowanych koncepcji jak np. pętli które zostaną omówione w kolejnych rozdziałach tego podręcznika.

Wielkość liter w nazwach[edytuj]

Wielkość liter w zmiennych, ma znaczenie, zarówno w języku Python jak i JavaScript. Bardzo prosty przykład:

name = "Programowanie"
print(Name);

Taki program nie będzie działał, interpreter zgłosi błąd o nieznanej zmiennej.