narzedzia
Przygotowanie środowiska programisty
18 października 2015
Obiekty i pakiety w języku Java
Obiekty w języku Java
1 listopada 2015
Metody w języku Java

Metody w języku Java

Artykułem tym rozpoczynamy serię artykułów – kurs programowania w języku Java. Po przeczytaniu tego artykułu będziesz wiedział czym jest typ danych, dowiesz się czym jest metoda. Poznasz kilka podstawowych rodzajów danych (typów). Postaram się też przekazać Ci kilka dobrych praktyk. Zaczynamy!

To jest jeden z artykułów w ramach darmowego kursu programowania w Javie. Proszę zapoznaj się z pozostałymi częściami, mogą one być pomocne w zrozumieniu materiału z tego artykułu.

Metoda

Więc jesteś już po przeczytaniu swojego pierwszego fragmentu kodu! Brawo! Programowanie to nie tylko pisanie, ale także czytanie kodu własnego czy innych programistów. Ale do rzeczy…

Metoda to nic innego jak „worek” grupujący zestaw instrukcji. Kod grupujemy w ten sposób z kilku powodów. Wymienię dwa, które moim zdaniem są najważniejsze:

  • jeśli jakiś fragment kodu ma być wykonany w wielu miejscach zdecydowanie lepiej jest utworzyć metodę i ją uruchomić (wywołać), niż kopiować ten sam fragment kodu wielokrotnie. Jest to istotne ponieważ w przypadku błędu trzeba go poprawić w jednym miejscu a nie kilku*1,
  • programy są duże, bez odpowiedniego podziału opanowanie całego projektu/programu jest bardzo czasochłonne. Sensowny podział na metody pozwala szybciej zrozumieć kod.

Deklaracja metody

Linijka ta zawiera kolejno:

  1. typ zwracany przez metodę,
  2. nazwę metody,
  3. typ argumentu,
  4. nazwę zmiennej, argumentu.

Teraz po kolei postaram się wytłumaczyć każdy z tych elementów.

Typy danych

Metoda wyżej przyjmuje argument someNumber. Argument ten ma swój typ int. Typ w języku programowania opisuje rodzaj danych. Np. w kodzie powyżej widoczne są 2 typy:

  • boolean – typ przechowujący wartości prawda/fałsz. Prawda reprezentowana jest przez wartość true. Fałsz to false. Typ ten może nam pomóc przechowywać informację o tym czy ktoś jest wysoki, czy jest pełnoletni, czy ma niebieski kolor oczu itp.

  • int – typ przechowujący liczby całkowite. Liczby te możesz zapisać na wiele sposobów, skupimy się na najprostszym – ciąg cyfr ewentualnie poprzedzony znakiem. Ten typ może nam posłużyć do przechowywania informacji o aktualnej temperaturze, wzroście, odległości z miasta A do B itp.

Tutaj muszę też powiedzieć o pewnych ograniczeniach. int podobnie jak każda inna wartość reprezentowana jest w pamięci komputera. Każda z wartości zajmuje określony rozmiar pamięci. Przez to ograniczenie nie jesteśmy w stanie przechowywać wszystkich liczb w zmiennej. Np. w przypadku Javy w zmiennej typu int możemy przechowywać numery od -2,147,483,648 do 2,147,483,647. Jak widzisz są do dość duże liczby jednak do pewnych zastosowań potrzebujemy innych typów danych.

Nazewnictwo

Każdy język programowania ma swego rodzaju standardy określające sposób w jaki powinniśmy nazywać metody, zmienne, funkcje, klasy itp. W języku Java używamy tzw. Camel Case. W uproszczeniu sprowadza się on do tego, że kolejne słowa łączymy w jeden ciąg znaków. Każde kolejne słowo piszemy wielką literą:

  • someSampleName,
  • example,
  • SampleClassName.

Swego rodzaju wyjątkiem są tu nazwy klas, które także zaczynamy od wielkiej litery.

Nie możemy użyć każdego ciągu znaków jako nazwy klasy/zmiennej/metody. Niektórych znaków nie możemy używać. Podobnie jest z niektórymi słowami. Java ma zestaw słów, które są „zastrzeżone” i nie mogą być użyte jako nazwa zmiennej. Kilka przykładów:

  • boolean – jest to typ danych, nie możemy tak nazwać zmiennej
  • class – jest to słowo kluczowe użyte przy definicji klasy,
  • return – słowo kluczowe użyte w metodzie oznacza wartość zwracaną przez daną metodę,
  • #2someName! – nie wszystkie znaki są dopuszczalne. Dla uproszczenia możemy przyjąć, że możemy używać wyłącznie małych i wielkich liter od a do z bez polskich znaków2.

Argument metody

Metody mogą przyjmować jeden argument. Równie dobrze mogą nie przyjmować żadnego argumentuj, właściwie to w języku Java mogą mieć ich dowolnie dużo. To, że jest to możliwe nie oznacza, że tak powinno się robić. W większości przypadków metody zawierające dużą liczbę argumentów są oznaką złych praktyk (ang. code smell). Duża liczba argumentów w metodzie pogarsza czytelność kodu.

Wynik metody

Metoda w języku Java może nie zwracać żadnej wartości, ma wówczas typ void jako typ zwracany. Możesz też napisać metodę, która zwraca dokładnie jedną wartość (obiekt lub typ prosty). Nie możesz natomiast napisać metody, która zwraca dwie lub więcej wartości. Można to obejść poprzez metody, które zwracają kolekcje obiektów (lista, tablica, zbiór, para etc.).

Ciało metody

Ciało metody to kod zawarty pomiędzy nawiasami klamrowymi {}. W naszym przykładzie ciałem metody jest

someNumber > 100 może zwrócić wartość logiczną. W zależności od wartości argumentu someNumber wartość ta będzie różna:

  • jeśli someNumber równa się 10 wówczas someNumber > 100 oznacza fałsz – false
  • jeśli someNumber równa się 100 wówczas someNumber > 100 oznacza fałsz – false
  • jeśli someNumber równa się 101 wówczas someNumber > 100 oznacza prawdę – true

Na koniec mam dla Ciebie małe ćwiczenie:

Ćwiczenie

Napisz metodę, która sprawdzi czy temperatura przekazana jako argument jest dodatnia. Po rozwiązaniu zadania możesz rzucić okiem na przykładowe rozwiązanie.

Podsumowanie

I jak czujesz się po pierwszej lekcji? Udało Ci się wykonać ćwiczenie? Daj znać jak Ci poszło w komentarzach. W następnym artykule będziesz mógł przeczytać o klasach. Jeśli chcesz być na bieżąco proszę polub stronę na Facebook’u.

Naukę dobrze jest rozpocząć w gronie znajomych motywując się nawzajem, proszę poleć im tą stronę – razem zaczniecie uczyć się programowania.

[FM_form id=”3″]

  1. DRY (ang. Don’t Repeat Yourself) zasada kładąca nacisk na redukcję powtarzającego się kodu
  2. Reguły są oczywiście dużo bardziej rozbudowane, jednak dla naszych potrzeb takie uproszczenie w zupełności wystarczy.
  • PiotrW

    Cześć,

    Odpowiedź do ćwiczenia:

    Prośba o komentarz czy dobrze zrozumiałem. 🙂

    • Marcin Pietraszek

      Cześć Piotrek 🙂
      Tak, dokładnie o to chodziło. Przejdź teraz do kolejnych artykułów, tam zadania będą już bardziej wymagające.

      • PiotrW

        Dzięki za odpowiedź, zabieram się do dalszej pracy. 🙂

  • Dagmara

    Cześć, zrobiłam podobnie, ale wybrałam inny typ zmiennych – short, bo pewnych wartości temperatur raczej nie osiągniemy 😉
    Dzięki za udostępniony kurs 🙂

    • Marcin Pietraszek

      Cześć Dagmara!
      Cieszę się, że się udało. To prawda takiego zakresu temepratur jaki może przechowywać liczba typu int na pewno nie uda się osiągnąć 😉

  • Ahlen

    Szkoda, że nie ma rozwiązania zadania, w którym dodatkowo wytłumaczysz jak uruchomić tę metodę tak by działało.

    • Masz rację, rzeczywiście tego brakuje. Dziękuję za wskazówkę :). Przygotowałem przykładowe rozwiązanie: https://github.com/SamouczekProgramisty/KursJava/blob/master/01_metody/src/main/java/pl/samouczekprogramisty/kursjava/methods/TemperatureCheck.java. Posta uzupełnię o screenshoty jak uruchomić program w ten sposób w najbliższym czasie. Jeszcze raz dzięki 🙂

      • Ahlen

        Marcinie, niestety, Twoje rozwiązanie dla mnie jako początkującego i w dodatku w pierwszej lekcji tutoriala jest nie zrozumiałe. Szkoda, że nie umieściłeś komentarzy, które mogłyby objaśnić kod. Czytałem o try / catch / finally (łapanie wyjątków) ale reszta to dla mnie czarna magia. Jak zwykle spotykamy się się tutaj z sytuacją, gdzie mentor (Ty) tłumaczy w bardzo przejrzysty sposób część teoretyczną, po czym przychodzi do napisania zadania przez nowicjusza i nagle ściana… Moje rozwiązanie, niestety bez metody i w dodatku bardzo prymitywne:
        https://4programmers.net/Pastebin/7140
        Próbowałem zrobić metodę, potem w warunku if sprawdzić temp. ale nie chciało mi w ogóle wziąć pod uwagę zadeklarowanej wcześniej zmiennej ze scannera przed pętlą if, która odpowiadała za wprowadzaną przez użytkownika temp (to miał być mój argument).

        • Masz rację, niepotrzebne to skomplikowałem. Proszę sprawdź jeszcze raz uproszczoną wersję. W tym przypadku pominąłem obsługę wyjątków i pobierania argumentu z linii poleceń – niepotrzebnie zaciemniały całość.

          Tutaj moim założeniem było napisanie metody „na sucho” bez jej uruchomienia. Dopiero w trzeciej lekcji uruchamiasz swój pierwszy program. Pewnie masz rację – powinienem trochę to przeredagować i wprowadzić metodę main wcześniej.

          Jeśli chodzi o Twoje rozwiązanie jest w porządku – działa poprawnie. Aby spełnić wymagania w 100% wystarczy wydzielić metodę 🙂

          Aby to zrobić możesz zaznaczyć linijki od 15 do 20 włącznie i nacisnąć Ctrl + Alt + M w IntleliJ lub Alt + Shift + M w Eclipse.

          Proszę daj znać jeśli masz jeszcze z czymkolwiek problem, jeśli tak to może uda się zrobić krótkiego „live’a” na facebooku 😉

          • Ahlen

            Teraz uważam, że rozwiązanie jest bardziej zrozumiałe niż poprzednio. Analizując kod od góry do dołu można nawet intuicyjnie wywnioskować jak to wszystko działa. Jeżeli mogę jeszcze doradzić jedną rzecz to komentarze. Dla początkujących nie wszystko jest od razu jasne i komentarz na pewno pomoże nam w zrozumieniu kodu, który piszesz, tym bardziej, że każdy ma inny sposób na rozwiązanie danego problemu (co jest akurat świetne!). Dziękuje za pomoc Marcin. Teraz mogę spokojnie przejść do kolejnej lekcji 😛

          • Jeśli chodzi o komentarze to jest trochę kontrowersyjne. Wrzucanie komentarzy w tak proste metody jest moim zdaniem złą praktyką więc staram się tego wystrzegać.

            W każdym razie dziękuję za uwagi, jeśli coś będzie dla Ciebie niejasne w kolejnych artykułach pisz śmiało 🙂

  • Eli

    To ja mam pytanie – bo bazując na artykule chciałam napisać własną metodę ale jak sprawdziłam przykładowe rozwiązania to moja wydaje sie za prosta i mam wrażenie ze nie do końca jest właściwa. Możesz podać najprostsze rozwiązanie zadania ? 😉

    • Hej Eli!

      Prościej się nie da (chyba, że użycie wyrażeń lambda jest prostsze ;))


      boolean isPositive(int temperature) {
      return temperature > 0;
      }

      • Eli

        dla mnie było 😉 przez przypadek, bo stworzyłam takie coś.

        boolean isPlus(int temperatura){
        return temperatura > 0;
        }

        Dzięki za informacje, bałam sie ze coś nie tak wykombinowałam.