Metoda main – czy warto poświęcić jej więcej uwagi?

metoda main napis

W niniejszym artykule omówię metodę main oraz postaram się odpowiedzieć na zadane w tytule pytanie (trochę filozoficzne pytanie 🙂) czy warto poświęcić jej więcej uwagi? Na początku wpisu przedstawię ogólny opis metody main oraz omówię kiedy metoda main jest uruchamiana. Następnie zostanie zaprezentowana metoda main w różnych językach programowania. W dalszej części artykułu przedstawię dobre praktyki dotyczące implementowania metody main oraz zaprezentuję przykłady metody main pochodzące z rzeczywistych projektów.

Metoda main

Metoda main, jak sama nazwa wskazuje, jest to główna metoda programu komputerowego. To w tej metodzie umieszczamy główne elementy kodu źródłowego. Metoda main nie występuje we wszystkich językach programowania, ale zawsze możemy się spotkać z pewnym punktem wejścia programu, skąd rozpoczyna się wykonywanie głównego kodu systemu. W wielu językach skryptowych nie występuje metoda main. W takich przypadkach kod zazwyczaj jest wykonywany od pierwszej instrukcji w pliku źródłowym.

Metoda main jest uruchamiana na początku wykonywania programu komputerowego, po etapie inicjalizacji podstawowych elementów programu. Podczas tworzenia programów konsolowych (uruchamianych z poziomu konsoli, terminala) często implementowana jest metoda main. W takich przypadkach, gdy program zostanie uruchomiony z poziomu konsoli następuje inicjalizacja programu oraz przekazanie wykonywania dalszych instrukcji do metody main. W niektórych typach programów komputerowych np. w wielu aplikacjach serwerowych nie implementujemy metody main. W takich przypadkach dostarczamy np. program obsługujący żądania HTTP, natomiast główna metoda main jest zaimplementowana w serwerze aplikacyjnym.

Należy zaznaczyć, że metoda main nie jest pierwszym miejscem, skąd zostaje wykonywany program komputerowy. Przed metodą main wykonują się instrukcje ładujące program komputerowy oraz instrukcje ładujące składowe elementy naszego programu np. klasy, statyczne dane, bloki kodu typu static. Metoda main stanowi punkt wejścia do głównego kodu źródłowego naszego programu.

Jak wygląda metoda main w różnych językach programowania?

W tej części artykułu przedstawię metodę main w różnych językach programowania. Będzie to swego rodzaju powtórka z klasycznego ćwiczenia Napisz program wyświetlający tekst Hello world 🙂. Może to być ciekawa powtórka, ponieważ będzie ona zaprezentowana w kilku językach programowania.

Język Java:

class Main {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}

Język C# (jedna z możliwych definicji, w poniższym przykładzie pomijamy argumenty wejściowe):

class MainClass
{
    static void Main()
    {
        System.Console.WriteLine("Hello world");		
    }
}

Język C (jedna z możliwych definicji, w poniższym przykładzie pomijamy argumenty wejściowe):

#include <stdio.h>

int main(void) {
    puts("Hello world");
    return 0;
}

Język C++ (jedna z możliwych definicji, w poniższym przykładzie pomijamy argumenty wejściowe):

#include <iostream>

int main() {
    std::cout << "Hello world" << std::endl;
    return 0;
}

Język Python (funkcja main jest opcjonalna, zależy od przypadku użycia kodu źródłowego):

def main():
    print("Hello world")

if __name__ == "__main__":
    main()

Język Kotlin (od wersji 1.3 jeśli nie używamy argumentu args to może być on pominięty w definicji poniższej funkcji):

fun main(args: Array<String>) {
    println("Hello world")
}
Dobre praktyki

Warto udokumentować gdzie znajduje się plik źródłowy zawierający metodę main w przypadku tworzenia oprogramowania, w którym wymagane jest uruchomienie programu poprzez podanie ścieżki do pliku z metodą main. Taką informację możemy umieścić np. w pliku z instrukcją, w pliku Readme, w dokumentacji. Plikowi źródłowemu zawierającemu metodę main warto nadać nazwę, która będzie sugerowała, że w tym pliku znajduje się punkt wejścia programu.

Metodę main warto umieścić na początku pliku źródłowego. Ponadto warto, aby metoda main była krótka. Metoda main może być krótka dzięki wywołaniu najważniejszych elementów kodu źródłowego. Na przykład metoda main może zawierać wywołanie konstruktora głównej klasy oraz następnie może zawierać wywołanie głównej metody tej klasy. Dzięki umieszczeniu metody main na początku pliku źródłowego oraz krótkiej jej definicji, osoba zainteresowana tą metodą może w szybki sposób ją odnaleźć.

Metodzie main warto poświęcić więcej uwagi na początku tworzenia projektu. Warto zdefiniować ją solidnie raz w początkowych etapach implementowania projektu. Dzięki takiemu rozwiązaniu w dalszych etapach tworzenia oprogramowania zazwyczaj nie jest już konieczne modyfikowanie tej metody.

Przykłady z rzeczywistych projektów

Poniższej znajduje się definicja funkcji main z graficznego programu komputerowego, który napisałem w języku C++. Funkcja znajduje się w pliku o nazwie main.cpp:

int main(int argc, char* argv[]) {
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

Poniższej znajduje się definicja metody main z graficznego programu komputerowego, który napisałem w języku Java. Metoda znajduje się w pliku o nazwie Main.java:

public class Main {

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            WindowUtils.trySetNimbusStyle();
            new MainController().run();
        });
    }

}

Poniższej znajduje się definicja metody main z aplikacji webowej, którą napisałem w języku Java. Metoda znajduje się w pliku o nazwie ApplicationStarter.java:

@SpringBootApplication
public class ApplicationStarter {

    public static void main(String[] args) {
        SpringApplication.run(ApplicationStarter.class, args);
    }

}

Poniżej znajduje się definicja metody main z aplikacji konsolowej, którą napisałem w języku Java. Metoda znajduje się w pliku o nazwie ApplicationRunner.java:

public class ApplicationRunner {

    public static void main(String[] args) {
        new FinderAlgorithm().loadAndStart(args);
    }

}

Poniżej znajduje się definicja metody main z gry komputerowej, którą napisałem w języku Java. Metoda znajduje się w pliku o nazwie RunnerGame.java (stworzona gra komputerowa ma nazwę Runner, stąd główna klasa ma nazwę RunnerGame):

public class RunnerGame extends BasicGame {

    private WindowContainer windowContainer;

    public static void main(String[] args) throws SlickException {
        AppGameContainer app = new AppGameContainer(new RunnerGame());
        app.setDisplayMode(GameConstants.SCREEN_WIDTH, GameConstants.SCREEN_HEIGHT, false);
        app.setForceExit(false);
        app.setShowFPS(GameConstants.DEVELOP_MODE);
        app.start();
    }

    // ...

}

Poniżej znajduje się definicja funkcji main z gry komputerowej, którą napisałem w języku Python. Funkcja znajduje się w pliku o nazwie Runner.py:

def main():
    window = GameWindow(screenWidth, screenHeight, screenTitle)
    window.initialize()
    window.eventLoop()

if __name__ == '__main__':
    main()
Podsumowanie:
  • warto udokumentować położenie pliku z metodą main w przypadku tworzenia programu, który do uruchomienia wymaga podania ścieżki do pliku z główną metodą,
  • metodę main warto umieścić na początku pliku źródłowego,
  • warto starać się, aby definicja metody main była krótka,
  • odpowiadając na zadane w tytule artykułu pytanie – warto poświęcić więcej uwagi metodzie main na początku tworzenia projektu. Gdy ją solidnie raz zdefiniujemy na początku projektu, w dalszych etapach implementowania projektu nie będzie wymagana częsta zmiana jej definicji.

Dziękuję za przeczytanie artykułu 🙂.

Jeżeli chcesz dowiedzieć się więcej na temat struktury ułożenia metod w pliku źródłowym to zachęcam do zapoznania się z artykułem Kod źródłowy jak dobre czasopismo? dostępnym tutaj: https://konstrukcjaoprogramowania.pl/kod-zrodlowy-jak-dobre-czasopismo

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *