Z dużym opóźnieniem po zajęciach mogę wreszcie Wam okazać dalszą część tematu rozpoczętego wczoraj. Mówiliśmy o tym, że w języku C nie było możliwości korzystania z logicznego typu danych. Mam dla Was kolejną wiadomość. Od 1999 roku wraz z wprowadzeniem standardu C99, niemożliwe stało się możliwe! "bool" w C zaczął istnieć! Bez żadnych bibliotek, wspomagaczy zewnętrznych czy haczyków! Przejdźmy do szczegółowego omówienia.

Zanim rozpoczniemy czytankę, chcę powiedzieć o małej zmianie tematów artykułów. Z powodu ponownego wtrącenia się zajęć zdalnych u mnie na uczelni, nie dam rady w chwili obecnej kontynuować materiału o tablicach. Zostały jeszcze dwa wątki, które z przyczyn ode mnie niezależnych (nie wyrobię się po prostu) przesunę na ten weekend. Aby dać sobie nieco odetchnąć, postanowiłem w takim razie rozpocząć kolejny rozdział dotyczący wartości logicznych w języku C. Opowiem Wam jak sobie radzić w niektórych sytuacjach mających związek z wyrażeniami logicznymi jeśli typ "bool" w C nie istnieje! To jest część pierwsza, czyli wyjaśnienie jaką wartością i jakim typem danych charakteryzuje się "prawda" i "fałsz" bez typu logicznego.

Zapraszam na kolejną część tłumaczenia notacji wskaźnikowej. Wczoraj wieczorem była tablica jednowymiarowa, a teraz pokażę jak wygląda notacja wskaźnikowa do tablicy dwuwymiarowej. Wszyscy Ci, co pominęli pierwszą część, zapraszam tutaj. Jeśli myśleliście, że ostatni artykuł przyprawia o zawrót głowy, tutaj dopiero zacznie się wyrywanie włosów! Nie żartuję!

Ponownie poruszę zagadnienie na temat relacji pomiędzy tablicą a wskaźnikiem w języku C i C++. Wątek ten jest albo wymagany, albo poboczny w zależności od tego, w jakim języku piszecie (albo chcecie pisać) na co dzień. Zakładając, że przeczytaliście wprowadzenie do wskaźników, mogę Was poprowadzić za rękę dalej i zaprezentować Wam jak wygląda notacja wskaźnikowa do identyfikowania odpowiedniego elementu w tablicy. Tutaj jedynie Was wprowadzę do tematu, a w tym miejscu zastaniecie zapisy dla tablicy dwuwymiarowej. Tam dopiero się dzieje! Na razie, przeanalizujemy tablicę jednowymiarową. Zapraszam!

Na dzisiaj mam dla Was treść materiału dotyczącą wskaźników w języku C. Ze względu na ostatnie wydarzenia w ciągu tych kilku dni, postanowiłem podzielić się zdobytą wiedzą na ten temat mając szansę utrwalić sobie ten materiał. Na razie takie proste podpunkty. Dowiemy się co to są "wskaźniki", jak je utworzyć w kodzie, co się pod nimi kryje oraz w jaki sposób mogą nam ułatwić pisanie kodu. Do dzieła!

Na końcówkę tego dnia przygotowałem artykuł, który będzie próbował obalić teorię, że mniejszy zakres danych to zawsze lepszy wybór. Dysponujecie szerokim wachlarzem różnych zakresów typów danych (zależy też jaki język). C i C++ na ten przykład mają "int" jak każdy inny język, ale dysponują również typem "short", "long" czy nawet "long long". Byłbym zapomniał, są też podziały na typ ze znakiem ("signed") i bez znaku ("unsigned"). W niektórych sytuacjach człowiek jest absolutnie pewny, że niektóre wartości NIGDY nie będą musiały potrzebować ujemnych liczb, na przykład liczba użytkowników w bazie danych. Jeden programista to wie, drugi to wie, koledzy tego drugiego też to wiedzą, a mimo wszystko ludzie na upartego trzymają się kurczowo standardowego rodzaju "int". Co to może oznaczać? Czemu mimo tych "pewniaków", że pewne zakresy czy zbyt duże liczby nie będą wcale potrzebne, twórcy kodu wciąż wykorzystują "integer"? Przeczytajcie moje hipotezy, a być może chociaż częściowo postaram się ukoić Waszą ciekawość.

Skaczemy ponownie do Javy i teraz pokażę Wam jak korzystać z mniej znanej struktury danych kryjącą się pod nazwą "HashMap". Użytkownicy Pythona raczej będą ją nazywali "słownikiem". Ja też wolę to stwierdzenie, natomiast ze względu na zachowanie tagów, będę korzystał naprzemiennie z obu tych nazw. Przejdźmy do wyjaśnienia jak w języku Java korzystać ze słownika.

Najnowsze doniesienia o moim szablonie do gier! Trochę więcej przygotowań i edukacji w zakresie wskaźników spowodowało popchnięcie "progressu" do przodu i zacząłem wczoraj wznawianie prac w "raylib". Co konkretnie się udało zrobić i na jakiej zasadzie zostawiam w środku artykułu.

Enumeracja to odrębna gałąź w programowaniu, która też wymaga porządnego wyjaśnienia. Typ wyliczeniowy również znajduje swoją użyteczność na wielu płaszczyznach i każdy porządny informatyk powinien tę strukturę znać. Co to jest "enumeracja"? Jak ją utworzyć? Jak ją można wykorzystać w praktyce i do jakich celów?

Dziwi Was tytuł artykułu? Zdziwię Was jeszcze bardziej do tego stopnia, że mogę zaburzyć Wasz dotychczasowy punkt widzenia na tablice w języku C. Może nie samą ich strukturę, ale sposób przetwarzania przez komputer. Tak naprawdę to nie są tablice, ale wskaźniki do poszczególnych argumentów! Koniecznie przeczytajcie resztę, a jeszcze sobie za to podziękujecie.

Pora, abym się wypowiedział na temat swojego rapu. Widząc, że nie zdobywa tego rzeszy fanów ani wyrazów aprobaty, nie wiem czy całkowicie nie zrobię sobie przerwy w tym kierunku na cały 2020 rok. Muzyka rap to również moja pasja jednak przy niej muszę się znacznie więcej napracować niż przy grach. Ponadto, zdechły moje słuchawki nauszne, które wiernie mi służyły od 2014 roku (i tak bardzo długo trzymały) i będę musiał kupić sobie nową parę. Nawet jeśli się w nie zaopatrzę, to nie widzę u siebie zapału stałego nagrywania tak jak kiedyś, skoro to nie trafia do nikogo. Niedługo będę miał 23 lata i choćby z tego powodu chciałbym nakręcić jeszcze jeden kawałek. Ale tylko jeden. Potem będzie cisza.

Mały kąsek informacji dotyczący tworzenia tablic w języku C. Mimo tego, że przedstawiona tutaj metoda wprowadzania argumentów może jedynie komplikować, to chcę żebyście i tak byli poinformowani o takiej możliwości. Standard języka wprowadzony w 1999 roku przez ISO udostępnia drugi sposób. Po raz kolejny pokażę dwa sposoby celem porównania: "tradycyjna" inicjalizacja tablicy w C, a potem druga opcjonalna metoda.

Kolejny rozdział poświęcony językowi C. Przyjrzymy się być może dla niektórych z Was nietypowemu zapisowi w kodzie źródłowym. Chodzi o funkcje. Zarówno w tym języku jak i w C++ to nie wygląda tak, że wstawimy sobie funkcję gdzie chcemy i mamy z bani. Języki te są bardzo wyczulone na położenie zarówno deklaracji jak i definicji funkcji. Robi to jakąś różnicę? Jak najbardziej i to DUŻĄ. Bo przy deklaracji wstawiamy prototyp funkcji, a przy definicji "pełną" jej strukturę. Zapraszam po wyjaśnienia.

Mam dla Was następną część z cyklu rekurencji. Wiemy już, że rekurencja oznacza odwoływanie się funkcji do samej siebie. A co w przypadku chęci zrobienia w drugą stronę? Powiedzmy, że ktoś grymasi przy rekurencji i chciałby zaaplikować wersję iteracyjną jakiegoś algorytmu poprzez zwykłą pętlę. Da się tak zrobić, ba, nawet na taki manewr wymyślono hasło. Nie połamcie sobie języka: derekursywacja!

W ten piękny (przynajmniej w moim rejonie) czwartek witam Was z następnym tematem programistycznym dotyczącym pewnej techniki wielokrotnego wykonywania tych samych instrukcji. Zachowanie identyczne jak w pętli, ale samo w sobie to nie jest pętla. To tak zwana "rekurencja", nie mylić z "referencją" (o niej było tu)! Eleganckie tłumaczenie w teorii plus przykład kodu źródłowego w języku C.

Wyobraźcie sobie, że nawet ze zwykłego przekazywania parametrów aktualnych do metod można zrobić temat na artykuł. Ja tak zrobiłem, gdyż i tutaj występuje zróżnicowanie w pisaniu. Większość języków programowania przekazuje zwykle do funkcji kopię wartości, co ma uchronić przed utratą wartości pierwotnej znajdującej się na zewnątrz danej metody. Język C umożliwia jeszcze jeden sposób: przekazywanie przez referencje. Jak to zrobić i jaki to ciągnie za sobą skutek? Czytajcie, a się dowiecie!

Powrócimy znowu do języka C prezentując całkowicie już archaiczną instrukcję skoku, która była wykorzystywana w czasach nałogowego używania języka FORTRAN. "break" i "continue" przyszły później, najpierw było "goto". Tak się składa, że C również jest zaopatrzony w to słowo kluczowe do dnia dzisiejszego. Od razu napiszę, nie przerzucajcie się na to! To już jest mocno przestarzała instrukcja od co najmniej 20 lat. Tak więc potraktujcie ten artykuł jak zapoznanie się z częścią historii programowania w latach .60 i .70.

Po mocnym spóźnieniu zapraszam Was na drugą część poprzedniego artykułu opowiadającego o klauzuli "try-catch" służącej do przechwytywania wyjątków z prostymi przykładami w języku Java. Postanowiłem poświęcić odrębny artykuł na te dodatkowe słowo kluczowe mające związek z wyjątkami, "finally". To jest blok, który wykonuje się zawsze niezależnie od tego, czy pewna ryzykowna operacja zakończyła się porażką lub sukcesem. Sprawdźmy jak to wygląda w praktyce.

Znowu artykuł i znowu Java. Przejdziemy do przechwytywania wyjątków, dowiemy się co to takiego, jak działa i jak się zabezpieczyć przed niepożądanym działaniem w trakcie korzystania z "ryzykownej" metody za pomocą klauzuli "try-catch". Jeśli nałogowo korzystacie z języka Java, opanujcie to jak najprędzej, to jest jeden z tematów podstawowych.

Ten artykuł też będzie prezentował moje kilkuletnie obserwacje. Raz kolejny weźmiemy pod lupę gry online od strony najpopularniejszych i najczęściej spotykanych gatunków. Przynajmniej od strony "indie" deweloperów. Popatrzyło się to tu, to tam i zauważyło się, że teraz niektóre gatunki gier online już wyszły z mody, a część z nich jest na topie. Jakie konkretnie?