Python3Tutorial #5: Instrukcje warunkowe.

Python3Tutorial #5: Instrukcje warunkowe.

Wiemy już, jak wyglądają podstawowe typy danych w Pythonie i jak działają zmienne. Pora na instrukcje warunkowe. Porozmawiamy o instrukcjach if – else – elseif, operatorze warunkowym oraz o najbardziej charakterystycznej cesze Pythona – obowiązkowych wcięciach w kodzie.

if – else

Na początek instrukcja if – najpopularniejsza instrukcja warunkowa na świecie. Wygląda to tak:

x = 4

if x > 1:
    print("x > 1")

Po słowie kluczowym if następuje warunek – dowolne wyrażenie, którego rezultat może być potraktowany jako prawda lub fałsz. Następnie znak dwukropka (:) i w nowej linii, z wcięciem (standard to 4 spacje), wywołanie funkcji print.
Jeśli x będzie większy od 1, funkcja print wypisze nam tekst na ekran.

Wyrażenie występujące po słowie if nie wymaga stosowania nawiasów. Nowy blok kodu nie wymaga stosowania nawiasów klamrowych – w Pythonie tę funkcję pełni jednolite wcięcie. Każdy nowy blok kodu jest poprzedzony znakiem dwukropka. Oczywiście w Pythonie nie stosujemy znaku średnika na końcu każdej linii kodu.

Jeśli warunek instrukcji if nie zostanie spełniony, możemy użyć słowa kluczowego else do wykonania alternatywnego kodu:

x = 0

if x > 1:
    print("blok if")
    print("x > 1")
    print("koniec bloku if")
else:
    print("blok else")
    print("x <= 1")
    print("koniec bloku else")

elif

Python nie posiada instrukcji switch (znanej choćby z C++). Musimy więc korzystać z powtarzających się bloków else – if, jeśli chcemy sprawdzić więcej niż 2 możliwości rozgałęzienia kodu. Miłym udogodnieniem jest tutaj słowo kluczowe elif, które zastępuje dłuższe wyrażenie else – if:

x = 13

if x == 0:
    print("x == 0")
elif x > 0:
    print("x > 0")
else:
    print("x < 0")

Instrukcje warunkowe można też oczywiście zagnieżdżać:

x = 13

if x != 0:
    print("x != 0")
    if x > 0:
        print("x > 0")
else:
    print("x == 0")

W tym przypadku jedyne słowo kluczowe else dotyczy pierwszej instrukcji if (if x != 0:), ponieważ zostało umieszczone na tym samym poziomie wcięcia.

Operator warunkowy

Inaczej znany z innych języków operator trójargumentowy. W Pythonie ta konstrukcja wygląda znów nieco inaczej, niż w większości popularnych języków programowania.
Skorzystajmy z sesji interaktywnej Pythona, żeby zobaczyć na żywo, jak to się zachowuje:

>>> x = 13
>>> y = 44
>>> z = 7
>>> z if x < y else 0
7
>>> z if x > y else 0
0

Wyróżnikiem jest tutaj instrukcja warunkowa przeniesiona do środka. Jeśli wyrażenie warunkowe instrukcji if (x < y) jest prawdą, rezultatem jest wyrażenie znajdujące się po lewej stronie instrukcji warunkowej. W przeciwnym wypadku rezultatem jest wyrażenie umieszczone po prawej stronie, po słowie kluczowym else.

Python3Tutorial #4: Zmienne.

Python3Tutorial #4: Zmienne.

Podstawy.

Zmienna jest jedną z najpopularniejszych koncepcji w świecie programowania. W Pythonie należy ją traktować jak nazwę przypisaną do obiektu. Nie definiujemy jej typu, ani też nie deklarujemy jej przed pierwszym użyciem. Po prostu przypisujemy wartość (obiekt) do nazwy:

x = 44

Od tej pory zmienna x wskazuje na obiekt liczby całkowitej, przechowujący wartość 44.
Jak już wspominałem wcześniej – w Pythonie to przypisywany do nazwy obiekt posiada typ (w tym przypadku typ int).

Oczywiście zmiennej możemy użyć w wyrażeniu – w takim przypadku w miejscu użycia zmiennej zostanie użyty przypisany do niej obiekt. Wygląda to bardzo intuicyjnie (nadal działamy w sesji interaktywnej):

>>> x = 50
>>> y = 20
>>> x + y
70
>>> x
50
>>> y
20
>>> z = x + y
>>> z
70

Dynamiczne typowanie.

W związku z tym, że zmienna nie ma zadeklarowanego typu, możemy do niej przypisać obiekty różnego typu (typowanie dynamiczne). Wygląda to tak:

>>> zmienna = "To jest tekst."
>>> zmienna
'To jest tekst.'
>>> type(zmienna)
<class 'str'>
>>> zmienna = 7
>>> zmienna
7
>>> type(zmienna)
<class 'int'>

Jak widzimy powyżej, funkcja type zwraca nam typ zmiennej (czyli tak naprawdę obiektu, na który zmienna wskazuje) w danym momencie w kodzie. Raz utworzonej zmiennej możemy przypisywać obiekty różnego typu w dowolnym momencie w kodzie (aczkolwiek sensowność i czytelność takiego rozwiązania jest moim zdaniem dyskusyjna).

Jak to działa ?

Zmienna w Pythonie działa mimo wszystko nieco inaczej, niż w większości innych języków programowania (szczególnie tych statycznie typowanych). Po przypisaniu jakiegoś obiektu do zmiennej, jej nazwa wskazuje na ten przypisany obiekt – wygląd i zachowanie takiej zmiennej przypomina referencje (lub wskaźniki) z języka C++.

Popatrzmy na poniższy przykład:

>>> x = 4
>>> y = x
>>> y
4
>>> x
4

W momencie przypisania x do y nie jest tworzona żadna kopia obiektu i jego wartości. Zamiast tego zmienna y zaczyna wskazywać na dokładnie ten sam obiekt, na który wskazuje x – obiekt przechowujący wartość całkowitoliczbową 4. Mamy tutaj sytuację, w której dwie zmienne wskazują na jeden obiekt w pamięci.

Przekonajmy się, że tak właśnie jest:

>>> id(x)
10968896
>>> id(y)
10968896
>>> id(x) == id(y)
True

W Pythonie każdy obiekt posiada swój unikalny identyfikator – funkcja id pozwala nam poznać tę wartość.

Nazewnictwo.

Jeśli chodzi o nazwy zmiennych, restrykcje są tutaj bardzo podobne do innych języków programowania. W Pythonie nie ma ograniczeń związanych z maksymalną długością nazwy zmiennej.
Dopuszczalne są małe i wielkie litery, cyfry oraz znaki podkreślenia. Nazwa zmiennej nie może się zaczynać od cyfry. Python rozróżnia małe i wielkie litery w nazwach zmiennych (Zmienna oraz zmienna to dwie dopuszczalne, różne nazwy).
Dodatkowym ograniczeniem jest zbiór zarezerwowanych słów kluczowych – podobnie do innych języków proigramowania, nie można ich użyć jako nazw zmiennych – interpreter Pythona zgłosi w takim wypadku błąd. Listę tych słów kluczowych można znaleźć w dokumentacji Pythona.

To tyle, jeśli chodzi o wprowadzneie do zmiennych w Pythonie. W kolejnych wpisach będą się pojawiać uwagi i wskazówki związane z tym tematem.

Co czeka framework Qt w 2018 roku ?

Co czeka framework Qt w 2018 roku ?

Qt wciąż niesamowicie się rozwija. Równolegle z poprawianiem błędów i tworzeniem nowych funkcjonalności, framework stara się opanowywać nowe, nieznane dotychczas dla niego obszary. Kolejne wersje przynoszą wsparcie dla nowych platform, zarówno systemowych, jak i sprzętowych.

Pod koniec lutego The Qt Company pochwaliło się planami rozwoju na 2018 rok. Postaram się pokrótce pokazać, czego można się spodziewać i na co czekać w obecnym roku. (więcej…)

C++11 #12: Jak działa semantyka przeniesienia ?

C++11 #12: Jak działa semantyka przeniesienia ?

Referencje do r-wartości.

Semantyka przeniesienia to jedna z kluczowych koncepcji nowoczesnego języka C++, która zadebiutowała w C++11. Sam język potrzebował jednak kilku nowych funkcjonalności, które umożliwiłyby wprowadzenie tej idei w życie.

Podstawą stały się referencje do r-wartości (ang. r-value references).

(więcej…)

DRY – KISS – YAGNI, czyli jak „doświadczeni” programiści zapominają o podstawach.

DRY – KISS – YAGNI, czyli jak „doświadczeni” programiści zapominają o podstawach.

DRY – KISS – YAGNI.

Tak, tak – wszyscy programiści uwielbiają chwytliwe akronimy. Ten podziw rośnie przeważnie wraz ze stażem pracy. Co jednak zauważyłem parę miesięcy temu – z zastosowaniem reklamowanych zasad w praktyce bywa bardzo różnie.

Kolejna obserwacja jest taka, że im prostsza reguła, tym trudniej ją zachować – naprawdę niesamowita sprawa. To jest wg mnie właśnie to, co odróżnia doświadczenie od stażu pracy.

(więcej…)