CodeGym /Kursy /JAVA 25 SELF /Kompilator i komentarze

Kompilator i komentarze

JAVA 25 SELF
Poziom 1 , Lekcja 5
Dostępny

1. Kompilator Java

Przy okazji, nie raz jeszcze usłyszysz, że niepodważalną przewagą Javy nad innymi językami jest wieloplatformowość. Czym to właściwie jest i z czym to się je? Zacznijmy od początku.

Chodzi o to, że komputer potrafi wykonywać tylko najprostsze polecenia.

Dla psów są komendy „Do nogi”, „Łapę” i inne — po ich usłyszeniu pies robi coś konkretnego. W komputerze rolę takich komend pełnią liczby: każda komenda jest zakodowana pewną liczbą (nazywa się to także kodem maszynowym).

Pisanie programu jako ciągu liczb jest bardzo trudne, dlatego ludzie wymyślili języki programowania i kompilatory. Taki język z jednej strony jest zrozumiały dla człowieka, z drugiej — dla kompilatora. Kompilator to specjalny program, który tłumaczy tekst programu napisany w języku programowania na kod maszynowy.

Zazwyczaj programista pisze program w języku programowania, a potem uruchamia kompilator, który na podstawie plików z kodem tworzy jeden plik z kodem maszynowym — finalny (skompilowany) program.

  • Program w języku C++
  • Kompilator
  • Program, składający się z kodu maszynowego
Etapy kompilacji dla języka C++

Powstały w rezultacie program może być od razu uruchamiany na komputerze. Minusem takiego podejścia jest to, że kod otrzymanego programu silnie zależy od procesora i systemu operacyjnego. Program skompilowany pod Windows nie będzie działał na telefonie z Androidem.

Jeśli napisałeś program pod Android, to w systemie Windows on się nie uruchomi!

Ale Java ma znacznie bardziej innowacyjne podejście.

  • Program w języku Java
  • Kompilator Java
  • Program, składający się ze specjalnych kodów (kod bajtowy)
  • Java VM
  • Program, składający się z kodu maszynowego
Etapy kompilacji dla języka Java

Kompilator Java nie kompiluje wszystkich klas do jednego programu z kodem maszynowym. Zamiast tego kompiluje każdą klasę osobno i nie do kodu maszynowego, lecz do specjalnego kodu pośredniego (kodu bajtowego). Kompilacja do kodu maszynowego odbywa się przy uruchomieniu programu.

A kto kompiluje program do kodu maszynowego w momencie jego uruchomienia?

Do tego służy specjalny program o nazwie JVM (Java Virtual Machine) — Wirtualna Maszyna Javy. Najpierw uruchamia się ją, a dopiero potem program składający się z kodu bajtowego. I to właśnie JVM, przed wykonaniem docelowego programu, kompiluje go do kodu maszynowego.

Jeśli masz mocny procesor, który obsługuje większy zestaw instrukcji maszynowych, to podczas „drugiej kompilacji” zostanie wygenerowany kod maszynowy z uwzględnieniem właśnie twojego procesora i systemu operacyjnego. Dlatego Java bywa czasem szybsza niż C++, który od razu kompiluje się do kodu maszynowego i może używać tylko najbardziej rozpowszechnionych instrukcji procesora.

2. Typowe błędy przy kompilacji

Szybkość i optymalizacja kodu na razie nie są dla nas bardzo istotne, za to ważne jest to, że kompilator sprawdza twój program pod kątem błędów. Weryfikuje poprawność kodu i nie przepuści go dalej, jeśli znajdzie nawet drobny błąd.

Przykład błędu:

Próbujesz przypisać liczbę do zmiennej, która może przechowywać tylko tekst.

String userName = 42; // Ups! Tak nie wolno.

Kompilator natychmiast zgłosi błąd, że typy nie odpowiadają: Cannot implicitly convert type 'int' to 'string'.

Inny przykład — literówka w nazwie metody println:

System.out.printline("Cześć!"); // Błąd w nazwie metody

Kompilator powie: „Nie ma takiej metody — sprawdź składnię!”

Jak czytać błędy?

Większość kompilatorów podpowiada, gdzie w kodzie jest błąd, a czasem nawet proponuje warianty naprawy. Nie bój się błędów: każdy z nich to krok ku oświeceniu i pokonaniu twojego wewnętrznego „bossa”.

3. Komentarze

Wyobraź sobie: piszesz złożony program. Wszystko działa, jesteś — geniusz! Ale po miesiącu otwierasz ten sam kod i... nic nie rozumiesz. Tu parę linijek, tam dziwna zmienna. W głowie tylko: „To na pewno pisał ktokolwiek, byle nie ja!”. I właśnie tu ratują nas komentarze.

Komentarze są jak notatki na marginesie podręcznika albo karteczki na lodówce („Piwo. Nie pić. Na rano!”). Kompilator je ignoruje, a ludzie — wręcz przeciwnie. Komentarze pozwalają wytłumaczyć sens kodu, zaznaczać ważne szczegóły, a nawet „wyłączać” fragmenty programu bez ich usuwania.

Ważne: żaden kompilator nie czyta twoich komentarzy — są całkowicie ignorowane!

Komentarze jednoliniowe

W Javie są dwa rodzaje komentarzy — jednoliniowe i wielowierszowe. Jednoliniowe zaczynają się od podwójnego ukośnika // i trwają do końca wiersza. Wszystko, co znajduje się po //, jest komentarzem i jest całkowicie ignorowane przez kompilator.

Przykład:

System.out.println("Witaj, świecie!"); 	// To wypisuje powitanie na ekran

Właśnie to // To wypisuje powitanie na ekran — to komentarz. Jeśli w kodzie nie jest jasne, po co jest dana linijka, po prostu tak to opisz!

Jeszcze jeden przykład:

int x = 42; 	// Wartość wieku programisty

Komentarze jednoliniowe można pisać także w osobnych wierszach:

// Inicjalizacja zmiennej z nazwą użytkownika
String userName = "Wiktor";

Prawie jak kwestie w scenariuszu: komentarz wyjaśnia, po co i dlaczego.

Komentarze wielowierszowe

A co, jeśli nazbierało się dużo do opowiedzenia? Prawdziwa historia? Do tego służą komentarze wielowierszowe, które zaczynają się od /* i kończą na */. Wszystko między tymi symbolami jest ignorowane przez kompilator, nawet jeśli to kilka wierszy.

Przykład:

/*
  Tutaj wypisujemy nazwę użytkownika na ekran.
  Jeśli nazwa nie istnieje, wypiszemy "Gość".
*/
System.out.println("Wprowadź swoje imię:");

Albo tak:

int age = 18; /* Wartość początkowa wieku
                 dla nowego użytkownika */

Uwaga: nie można zagnieżdżać jednych komentarzy wielowierszowych w inne. Nie próbuj być sprytniejszy od kompilatora — to nie zadziała.

Ilustracja:

Rodzaj Składnia Przykład
Jednoliniowy
// komentarz
int x = 1; // wyjaśnienie
Wielowierszowy
/* cokolwiek tutaj */
/* tutaj można wyjaśnić wszystko, co chcesz */

4. Przykłady z życia

„Wyłączenie” wiersza kodu:

Zdarza się, że chcesz tymczasowo nie wykonywać jakiegoś fragmentu kodu. Komentarze są tu jak najbardziej na miejscu:

// System.out.println("Tekst, który tymczasowo nie jest potrzebny");

Linijka została, ale kompilator jej nie „widzi”.

Adnotacje TODO i FIXME

Programiści to też ludzie i czasem trzeba samemu sobie przypomnieć, że kod nie jest jeszcze skończony albo że jest tu błąd. Do tego często pisze się:

// TODO: dodać sprawdzenie pustego wejścia
// FIXME: ta funkcja błędnie liczy sumę

Wiele edytorów i IDE nawet wyróżnia takie słowa!

Programiści żartują

// Nie odpowiadam za ten kod. Zmuszono mnie, by go napisać wbrew mojej woli.
// Drogi ja_z_przyszłości! Proszę, wybacz mi ten kod.
// Jeśli jeszcze raz coś takiego zobaczę, będę musiał zacząć nosić do pracy broń.
// Jeśli ten warunek kiedyś się spełni, proszę, powiadom mnie pod tel. xxx-xxx-xxx za wynagrodzeniem.
// Drogi programisto:
//
// Kiedy skończysz "optymalizować" ten podprogram
// i zrozumiesz, jak wielkim błędem było to robić,
// proszę, zwiększ licznik na dole jako ostrzeżenie
// dla następnego gościa:
//
// liczba_godzin_spędzonych_tutaj = 42
// Kiedy zaczynałem to pisać, tylko Bóg i ja rozumieliśmy, co robię. 
// Teraz został już tylko Bóg
// Czasami wydaje mi się, że kompilator ignoruje wszystkie moje komentarze
// Poświęcam cały mój kod, całą moją pracę mojej żonie Darlin, która 
// będzie musiała utrzymywać mnie, naszą trójkę dzieci i psa, kiedy 
// to trafi na produkcję.

Tak, komentarze potrafią być bardzo zabawne. W końcu piszą je żywi ludzie.

1
Ankieta/quiz
Komendy i pierwszy program, poziom 1, lekcja 5
Niedostępny
Komendy i pierwszy program
Komendy i pierwszy program
Komentarze (1)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Przemo Poziom 4, Legnica, Poland
26 marca 2026
Task "fixing bugs" is actually bugged 😆 Even downloaded solution not passing.