26.03.2017

Elementarne typy danych i zmienne - Programming Thru Java

Witam serdecznie!

Poprzednim razem zająłem się tak naprawdę sprzedażą dywanów czy przedziwnych mikstur na wszystkie choroby świata. Po tym luźnym wprowadzeniu w temat i napisaniu swojego pierwszego legendarnego Hello World'a pora na dalsze kroki. 

Dzisiaj zajmiemy się zmiennymi oraz ich prymitywnymi typami w Javie. Na wstępie zastrzegam iż lekcja ta może zawierać wiele uproszczeń. Java jest w pełni obiektowym językiem programowania, który działa w oparciu o tzw. maszynę wirtualną Javy. Póki co ograniczymy się do pisania programów ograniczających się tylko i wyłącznie do rozbudowywania metody startowej static void main(String[] args) co pozwoli nieco uprościć temat celem wprowadzenia. Raczkującemu programiście terminy te na obecną chwilę mogą tylko niepotrzebnie skomplikować życie, więc póki co tylko o nich napomnę na potrzeby tejże lekcji. Definitywnie jeszcze wrócimy do tych terminów jak już będziesz na to gotowy/gotowa. Ale mimo wszystko zapamiętaj maksymę: W Javie wszystko jest obiektem!

Czym są zmienne?

Najprościej rzecz ujmując zmienna jest to informacja zapisana (najczęściej) w pamięci komputera. 
  • Nazwa - Zmienne posiadają symboliczną nazwę która ułatwia jej wykorzystywanie w kodzie. Nazwa zmiennej jest tożsama z określeniem identyfikatora zmiennej.
  • Adres - Każda zmienna posiada swój adres w pamięci, poprzez który możemy się do niej odwołać. Zmienne uzyskują adres w pamięci wskutek ich zadeklarowania. W Javie w odróżnieniu od wielu innych języków programowania, rzadko kiedy trzeba szczególnie martwić się o fizyczne adresy zmiennych w pamięci. Zatem znów upraszczamy wszystko do twierdzenia iż zmienną zapisuje się po prostu gdzieś w pamięci
  • Typ - Każda zmienna również jest zdefiniowana poprzez typ. W dużym uproszczeniu typ określa rodzaj informacji przechowywanej przez zmienną. Czy jest to obrazek, plik czy może tak jak w przypadku tej lekcji liczba całkowita, zmiennoprzecinkowa czy po prostu tekst (Wiem! Fachowo łańcuch znaków). Z racji iż Java jest tylko i wyłącznie obiektowa temat ten potraktujemy z ogromnym uproszczeniem. Przy okazji tłumaczenia czym są obiekty w przyszłości myślę że wszystko stanie się jasne w tym punkcie.
  • Wartość - Czyli nic innego niż zapisanie w pamięci tego na czym chcemy operować. W zależności od typu zmiennej możliwe jest zapisywanie różnych rodzajów wartości kompatybilnych z zakresem  i typem zmiennej. Wraz z określeniem wartości dla zmiennej mamy do czynienia z jej definicją. Jeżeli nie ustalimy wartości zmiennej to otrzyma ona wartość domyślną. W Javie w szalonej ilości przypadków deklaracja i definicja są nierozłączne.
  • Długość - W zależności od tego z jak wielką wartością/zakresem typu zmiennej mamy do czynienia to zmienna może ona posiadać inną długość. Pod tym pokręconym zdaniem na chłopski rozum nie kryje się nic innego niż to iż każdy typ zmiennej lub jej wartość może wpływać na to ile pamięci zmienna zajmuje.
Ażeby nie pozostać gołosłownym posłużmy się obrazującym temat przykładem. Mamy do czynienia z wyimaginowanym komputerem który posiada 64 bity pamięci RAM. Jeden bajt to osiem bitów. Spróbujmy za pomocą Java zamodelować w nim nasz wiek i go wyświetlić. W tym celu utwórz nowy projekt Przyklad001 analogicznie tak jak to miało miejsce w poprzedniej lekcji, wpisz następujący kod. Kody źródłowe dla wszystkich przykładów również możesz pobrać stąd.

Zmienna zmienną jest - A.D. Zielony 2017. Czyli wartości zmiennych mogą ulegać zmianie w trakcie pracy programu. Wartość zmiennych zmienia się poprzez ponowne przypisanie do nich wartości. Dobrze to pokazuje Przyklad002, w którym wartość zmiennej wiek ulega zmianie w trakcie pracy programu:
Możliwe również jest przypisywanie wartości jednej zmiennej do drugiej. Dobrze pokazuje to przykład Przyklad003.

Typy prymitywne zmiennych

Poniżej znajduje się spis prymitywnych typów zmiennych dostępnych w języku Java oraz garść informacji o nich.

boolean

  • Długość - zależna od maszyny wirtualnej, ale z reguły jeden bit.
  • Wartość domyślna - false (fałsz).
  • Przykład:
  • boolean ukonczony = true;
  • Opis - Jest to typ zmiennej, który pozwala w dużym uproszczeniu na przechowywaniu jedynie dwóch wartości (prawda -> true oraz fałsz -> false). Pozwala na przechowywanie wyników operacji logicznych. Myślę że na zrozumienie tego typu zmiennych jeszcze przyjdzie pora.

char

  • Długość - 16 bitów.
  • Wartość domyślna - null (pusta);
  • Wartość minimalna - Unicode 0.
  • Wartość maksymalna - Unicode 65535.
  • Przykład:
  • char literka= 'a';
  • Opis - Jest to typ zmiennej, który pozwalana przechowywania jednego znaku Unicode. Unicode to nic innego niż tablica w której do każdej z liczb całkowitych przypisany jest jeden symbol. Przykładowo litera 'a' to U+0041. Całą tabelę możesz obejrzeć tutaj

byte

  • Długość - 8 bitów.
  • Wartość domyślna - 0;
  • Wartość minimalna - -128.
  • Wartość maksymalna - 127.
  • Przykład:
  • byte wiek= 18;
  • Opis - Jest to typ zmiennej, który pozwala na przechowywanie wartości całkowitoliczbowej, zapisanej na jednym bajcie pamięci. Jest to najlżejszy typ wartości całkowitoliczbowej ale jednocześnie o najmniejszym zakresie.

short

  • Długość - 16 bitów.
  • Wartość domyślna - 0;
  • Wartość minimalna - -32768.
  • Wartość maksymalna - 32767.
  • Przykład:
  • short rok= 2017;
  • Opis - Jest to typ zmiennej, który pozwala na przechowywanie wartości całkowitoliczbowej, zapisanej na dwóch bajtach pamięci (16 bitach). Jest to nieco większy typ od byte.

int

  • Długość - 32 bitów.
  • Wartość domyślna - 0;
  • Wartość minimalna - -2147483648.
  • Wartość maksymalna - 2147483647.
  • Przykład:
  • int predkoscSwiatla= 299792458;
  • Opis - Jest to typ zmiennej, który pozwala na przechowywanie wartości całkowitoliczbowej, zapisanej na czterech bajtach pamięci (32 bitach). Jest to nieco większy typ od short.

long

  • Długość - 64 bitów.
  • Wartość domyślna - 0;
  • Wartość minimalna - -9223372036854775808.
  • Wartość maksymalna - 9223372036854775807.
  • Przykład:
  • long cwiercDrogiDoGalaktykiAndromeda= 5912950000000000000l;
  • Opis - Jest to typ zmiennej, który pozwala na przechowywanie wartości całkowitoliczbowej, zapisanej na ośmiu bajtach pamięci (64 bitach). Jest to nieco największy typ.

float

  • Długość - 32 bitów.
  • Wartość domyślna - 0;
  • Wartość minimalna - IEEE754.
  • Wartość maksymalna - IEEE754.
  • Przykład:
  • float masaWlasna = 87.6f;
  • Opis - Jest to typ zmiennej, który pozwala na przechowywanie wartości zmiennoprzecinkowej. Komputery posiadają ograniczone możliwości przechowywania precyzji liczb. Dla Javy wartości te są określone przez standard IEEE754. Czyli nic innego niż możliwość przechowywania ułamków.

double

  • Długość - 64 bitów.
  • Wartość domyślna - 0;
  • Wartość minimalna - IEEE754.
  • Wartość maksymalna - IEEE754.
  • Przykład:
  • double precyzja = 3.5789055d;
  • Opis - Jest to typ zmiennej, który pozwala na przechowywanie wartości zmiennoprzecinkowej z zachowaniem podwojonej precyzji. Komputery posiadają ograniczone możliwości przechowywania precyzji liczb. Dla Javy wartości te są określone przez standard IEEE754. Czyli nic innego niż możliwość przechowywania ułamków.
Poniżej znajduje się przykład kodu pokazujący wykorzystanie wszystkich wymienionych typów prymitywnych Przyklad004:

Przekroczenie zakresu typu zmiennej

A co się stanie jak będziemy chcieli oszukać system i ustawimy wartość zmiennej na taką spoza zakresu? Sprawdźmy to Przyklad005!

Eclipse wykrył w naszym kodzie błąd, którego komunikat można podejrzeć za pomocą karty Problems. O diagnozie błędów i poszukiwania metod ich rozwiązania napiszę w dalszej części kursu. Programów zawierających błędy nie da się uruchomić.

Spróbuj sam/sama!

Zadanie 1

Napisz program w którym zamodelujesz za pomocą wybranego typu zmiennej jakąś wartość z życia wziętą i wyświetlisz ją w konsoli. Jak Ci się uda to spróbuj tak zrobić z dowolnym typem zmiennej.

Zadanie 2

Jak zamodelować następujące wartości w kodzie za pomocą zmiennych i wyświetlić je w postaci tekstu konsoli?
  • Jacek ma 5 palców.
  • Zdanie Julii to false.
  • Do księżyca mamy 384 403 km a ile to metrów?
  • Długość fali świetlnej dla utrafioletu to 0,00000035m;
  • Imię Anna piszemy od wielkiej litery A a andruty od a.
  • Za pomocą Unicode można zarówno drukować znaki ® jak i ¾.

Zadanie 3

Spróbuj dla każdego z przedstawionych typów zmiennych przekroczyć jej zakres.

24.03.2017

Programming Thru Java - Zaczynamy przygodę z Java

O mnie i programowaniu

Jak zapewne część z was wie - zawodowo zajmuję się między innymi programowaniem w języku Java. Posiadam kilkuletnie doświadczenie zarówno w developerce, analityce jak i przeprowadzaniu rozmaitych szkoleń. Fakt ten nie mógł obejść się bez echa podczas mojej obecności w sieci. W związku z tym, duża część widzów mojego kanału na platformie Twitch niezmiernie często zadaje mi pytania pokroju:

  • Czy dam sobie radę w programowaniu? 
  • Czy to jest trudne? 
  • O co w tym w ogóle chodzi? 
  • Czy opłaca się zostać programistą?

Chciałbym aby kurs ten stał się próbą odnalezienia klarownych odpowiedzi na powyższe pytania i ich pochodne. Niezmiernie istotne dla mnie jest aby to co zamieszczę w tym miejscu było jak najbardziej przyjazne nowicjuszowi a jednocześnie okazało się czymś przydatnym i praktycznym.

Czy programowanie jest dla mnie?

Zapewne gdybyś nie zadawał/zadawała sobie tego pytania to pewnie by Ciebie tutaj nie było. W mojej skromnej ocenie umiejętność programowania jest możliwa do osiągnięcia dla każdego człowieka. Aby Cię przekonać posłużę się pewnym zobrazowaniem:

Czy każdy człowiek może być kierowcą? Oczywiście że tak! Tylko pozostaje kwestia tego czy dosięgnie do pedałów i kierownicy oraz czy zostanie kierowcą rajdowym czy niedzielnym woźnicą rodziny do centrum handlowego. Niewykluczone też że będzie kierować ciężkim zestawem dwu-naczepowym albo ograniczy się tylko do roweru.

Z powyższej konkluzji wynika iż każdy może spróbować i każdy da radę nauczyć się technik oraz sposobu myślenia niezbędnych dla programisty. Lecz nie każdy będzie twórcą nowych systemów operacyjnych a część ograniczy się jedynie do programowania domowych projektów dla czystej przyjemności. 

Bez względu na to co planujesz osiągnąć istotne są predyspozycje których posiadanie jest znacznym ułatwieniem przygody z programowaniem. Część z nich możesz odkryć w sobie dopiero po tym kursie ale mimo to warto spróbować.
  • Cierpliwość - to cecha która zdecydowanie jest przydatna programiście. Zdecydowanie małymi krokami osiągnie się tutaj więcej niż idąc na skróty.
  • Zaangażowanie - bez tego może być ciężko. Nie ograniczaj się do biernego korzystania z tylko i wyłącznie jednego źródła informacji. Szukaj wiedzy wszędzie gdzie się da i dbaj o to by była jak najbardziej wszechstronna i aktualna.
  • Wytrwałość i pokora - nie od razu Rzym zbudowano powiadają... Zdanie to pasuje jak ulał do profesji programowania. W swojej karierze nieustannie będziesz popełniać błędy i trzeba nauczyć się je odnajdować i traktować jako najlepszy sposób na naukę. Im bardziej będziesz ogarnięty/ogarnięta w temacie tym błędów będzie mniej - co nie zmienia faktu iż dalej będą się pojawiać.
  • Dystans i luźne podejście - wszystko bierz na rogi z daleka. Jak się uda to super, a jak nie to też super bo być może uda się innym razem lub w innych okolicznościach.
  • Otwartość - nie ma rzeczy niemożliwych! Zapamiętaj to sobie. Każdy problem da się rozwiązać stosując odpowiednią technikę i będąc uzbrojonym w wymienione wyżej cechy. 

Co znajdę w tym kursie?

Niestety ale muszę już na wstępie nadmienić iż nie będzie to wysokobudżetowy, komercyjny kurs przeznaczony dla przyszłych tytanów korporacji. Zdecydowanie spodziewaj się po mnie luźnej dywagacji na temat specjalizacji w której się poruszam zawodowo i próby przyjemnego i bezinwazyjnego zanurzenia twojego umysłu w świat "liczb i cyferek". Mimo szczerych chęci i ambicji nie dysponuję odpowiednią ilością wolnego czasu i środków na wprowadzenie w pełni profesjonalnego podejścia do tematu. Zatem co mogę Ci zaoferować?
  • Wprowadzenie w świat programowania wedle doktryny od "zera do bohatera".
  • Przyjazne i luźne wytłumaczenie na czym dokładnie to wszystko polega.
  • Zapoznanie Ciebie na tyle z tematem aby możliwa była jego samodzielna kontynuacja.
  • Pokazać na przejrzystych przykładach jak coś działa w praktyce.
  • Zainspirować do poszerzania swojej wiedzy i praktykowania.
  • Namiary na inne kursy czy bibliografię poszerzającą horyzonty.

Czego nie znajdę w tym kursie?

Nie byłbym sobą gdybym nie wyjawił na wstępie tego czego zabraknie w tym kursie:
  • Pełnego opisu zagadnień - oj zdecydowanie nie. Programowanie to temat rzeka. Naiwnym jest ten, kto chce w tej tematyce znaleźć wszystko w jednym miejscu. W związku z powyższym chciałbym skoncentrować najistotniejsze informacje i zgromadzić celne opisy w tymże kursie.
  • Unikania uproszczeń - z racji tego iż jest to kurs dla przeciętnego zjadacza chleba, znajdzie się tutaj niejedno uproszczenie. Zdecydowanie nie będę w stanie tego uniknąć. Jednak by duma weterana jakimś cudem zapoznająca się z tym co przekazuję nie była urażona - będę jasno zaznaczać fakt stosowania uproszczeń i zostawiał odnośniki do bardziej rozwiniętego opisu problemu.

Dobra to zaczynamy

W swoim życiu i zarazem karierze poznałem co najmniej kilkanaście języków programowania. Część z nich ledwie liznąłem a dla części z nich mogę pochwalić się "praktycznym zderzeniem z rzeczywistością". Język programowania Java w moim przypadku zdecydowanie zalicza się do drugiej grupy. Po prostu posługuję się nim na codzień częściej niż językiem mówionym, więc wybrałem go jako płótno do namalowania naszego kursu. Do tego nie skłamałbym gdybym powiedział że Java dominuje w niektórych branżach rynku pracy a do tego jest bardzo przyjazna dla początkujących. Wiadome każdy medal ma dwie strony więc i są wady tego języka - ale o tym innym razem.

Skonfigurowanie środowiska pracy

Tak jak kierowca do pracy potrzebuje samochodu tak i programista do pracy potrzebuje środowiska programistycznego. Nie narzucam w tym miejscu jakiegoś szczególnego edytora bo na rynku jest sporo tego (chociażby Eclipse, NetBeans, InteliJ). Jednak by kurs był przejrzysty będę w tym kursie odwoływać się tylko do programu Eclipse. Oprócz edytora również należy wyposażyć się w środowisko developerskie Javy.

1. Instalacja środowiska developerskiego Java

W tym celu należy udać się na stronę producenta Java i pobrać pakiet developerski (tzw. JDK). Wybierz odpowiednią wersję dla swojego systemu operacyjnego.  W chwili pisania tego kursu najnowsze JDK to wersja ósma, możliwa do pobrania stąd


Jeżeli masz Windowsa i nie wiesz czy posiadasz wersję 32-bitową (x86) czy 64-bitową (x64) to możesz to sprawdzić klikając prawym przyciskiem myszy na "Mój komputer" i wybierając "Właściwości". Z pobranego instalatora zainstaluj środowisko niezbędne do dalszej pracy.

2. Instalacja Eclipse

Najnowszego Eclipse możesz pobrać ze strony producenta. Pobierz i zainstaluj go na swoim komputerze.


Mój pierwszy program: Hello World!

Zatem nie zwlekajmy i zabierzmy się za uruchomienie środowiska programistycznego Eclipse aby stworzyć nasz pierwszy program. Programiści mają w zwyczaju nazywać tego typu wytwory "Hello Word'ami" czyli programiami które nic nie robią poza przywitaniem się z nami w konsoli.

1. Wybierz domyślny workspace

Jest to przestrzeń na dysku gdzie będą przechowywane Twoje projekty. Możesz bez problemu zostawić domyślną lokację.

2. Wybierz z menu stworzenie nowego projektu


3. Stwórz projekt "Hello World"


4. Stwórz klasę główną aplikacji:




5. Pierwsza linijka kodu

W wyniku tego automatycznie zostanie założona klasa startowa o nazwie "Aplikacja". Zawiera ona metodę static void main(String[] args) która będzie punktem od którego rozpocznie się uruchomienie aplikacji. O metodach i klasach szerzej opowiem w dalszej części kursu.

Dopiszmy zatem pierwszą linijkę naszego kodu, która wydrukuje w konsoli napis "Witaj świecie!!!".

6. Uruchomienie programu

Aby uruchomić program należy wcisnąć przycisk "Run" . Wtedy w konsoli wyświetli się oczekiwany rezultat:

Zatem masz za sobą ten skromny początek. W wolnej chwili przygotuję dla Ciebie dalszą część kursu. A tymczasem dziękuję za uwagę i życzę miłego dnia! ☺☺☺☺☺

18.03.2017

A Ty ile masz Zielonych - wprowadzenie do Revlo

Siemanko!

Dzień dzisiejszy jest dniem szczególnym dla mojego kanału na Twitch. Dzięki waszemu zaangażowaniu w temat mogę się rozwijać i dałem radę dojść do miejsca w którym się obecnie znajdujemy. Jak zapewne wiecie, apetyt rośnie w miarę jedzenia. Zatem mam dla was małą niespodziankę, którą zamierzam opisać poniżej.

Revlo!

Jest to system umożliwiający innowacyjne podejście do streamowania i budowania społeczności wokół kanału. Nagradza i wyróżnia osoby które mają wpływ na tworzenie ów środowiska. Wprowadza również mnóstwo świeżości i dobrej zabawy. Zatem do rzeczy!

Zielone!

O tak wszystko jest zielone i wszystko kręci się wokół zielonych... Od dziś jeden Zielony to równowartość twoich 5 minut zaangażowania w kanał.

Premia początkowa

Jesteś częścią Zielonej społeczności już od dawien dawna? Zapewne zadajesz sobie pytanie gdzie są Twoje Zielone? Nie przejmuj się pomyśleliśmy przede wszystkim o Tobie! Stali bywalcy otrzymują premię początkową będącą sumą następujących czynników:
  • Ilość dni śledzenia kanału - im wcześniej dałeś/dałaś "Followa" tym więcej otrzymujesz premii startowej. Jeden dzień followania = 10 punktów.
  • Donate'y - im więcej zostało przez Ciebie zainwestowane w kanał tym więcej dodatkowych Zielonych dla ciebie. 1zł twojej dotacji dał Tobie 6 Zielonych (wartości zaokrąglane do pełnych złotówek). Również wliczyłem w to dotacje w skinach do CS:GO.
  • Moderacja - wzorowi i aktywni moderatorzy otrzymali premię extra 500 punktów początkowych.

Jak z tym żyć?

Nic prostszego. Wejdź na stronę swojego profilu Revlo i sprawdź co tam jest dostępne.  Poniżej zostały opisane wszystkie jego interfejsy.

Strona startowa

Tutaj możesz sprawdzić ile aktualnie posiadasz Zielonych. Również z tego widoku możesz wydać je na jakąś akcję/zdarzenie na streamie. Swoje punkty możesz wydać na rozmaite akcje:
  • Nagrody - możesz wynagrodzić sobie czas spędzony na streamie poprzez wybranie jakiejś akcji typu nagroda. Może to być zarówno jakiś wirtualny drobiazg jak i faktyczna nagroda rzeczowa.
  • Zdarzenie na ekranie streama - wraz z rozwojem kanału pojawiły się ciekawe zwyczaje wypisywane w czacie. Od teraz możecie je praktykować jeszcze bardziej epicko niż do tej pory!
  • Boosty - chcesz się koleżeńsko zachować w stosunku do innych widzów? Odpal im przyspieszenie lub rozdaj określoną ilość Zielonych wszystkim oglądającym!
Nagrodę wybierasz poprzez przycisk "Redeem" (po polsku zażądaj). Wtedy zostanie ona przekazana do realizacji Zielonemu i zostanie wyświetlone na streamie Twoja chęć jej zrealizowania. Wraz z rozwojem kanału będziemy dokładać kolejne nagrody do rozdania.

Ranking widzów

Tutaj możesz zobaczyć kto ma obecnie najwięcej zielonych. Pod uwagę nie są brane wydane Zielone, uzyskane poprzez boosty, ruletki czy konkursy. Czyli w zasadzie jest to ranking osób najdłużej oglądających widzów.

Komendy

Tutaj znajdziesz listę wszystkich komend dostępnych do użycia z poziomu czatu na Twitch. Możesz używać Revlo zarówno z poziomu komend na Twich lub z poziomu swojego profilu na Revlo profilu Revlo.

Przeszłe konkursy

Tutaj możesz sprawdzić jak Ci szło w konkursach Revlo jakie miały miejsce na streamie oraz ile Zielonych w nich wygrałeś/wygrałaś.

Przeszłe GiveAway'e

Tutaj możesz sprawdzić w jakich GiveAway'ach brałeś/brałaś udział i kto je wygrał. Jeżeli jesteś osobą która wygrała GiveAway to możesz tutaj odnaleźć dane jak odebrać swoją nagrodę.

Cele społeczności

Wszystkie Zielone zbierane przez widzów sumują się do osiągania tzw. Celów społeczności. Są to wydarzenia które zostaną uruchomione wskutek osiągnięcia określonej liczby Zielonych w określonym czasie. W tej zakładce możesz sprawdzić w jakich tego typu akcjach brałeś/brałaś udział.

Jak ja dogonić pierwszych Followersów?!

Jak ja mam konkurować z ludźmi co oglądają kanał od dwoch lat?! Spokojnie, i o tym pomyśleliśmy...  Początkowo na streamach będzie się pojawiać mnóstwo premii startowych. Biorąc udział w zabawach i po prostu oglądając streama również z łatwością nadgonisz te dinozaury co są z Zielonym od początku (pod warunkiem że sami nie wrócą do oglądania).

Zatem życzę owocnych łowów i mnóstwo dobrej zabawy na Zielonych streamach w nowej formie!