Skip navigation


Di grup Olimpiade Informatika, salah satu pertanyaan yang sering muncul oleh siswa yang baru mulai belajar C++ adalah

Apa itu `using namespace std`

Sebelum menjawab ini, mungkin perlu dijelaskan sedikit tentang konsep namespace di C++. Pada pelatihan pemrograman untuk Olimpiade Informatika, hal ini memang tidak terlalu dibutuhkan, jadi dalam banyak sesi pelatihan penggunaan statement using namespace std; sering dianggap hafalan. Untuk itu saya coba sedikit jelaskan tentang namespace.

Deklarasi sebuah fungsi sederhana di C++ adalah sebagai berikut

int function(){
    return 1;
}

int main(){
    function();
}

Kadang-kadang untuk beberapa fungsi yang penggunaannya mirip, kita suka menggunaan nama yang sama. Dan untuk membedakan antara fungsi-fungsi tersebut kita menambahkan nama tertentu (umumnya) di depan fungsi.

int ns1_function(){
    return 1;
}

int ns2_function(){
    return 2;
}

int main(){
    ns1_function();
    ns2_function();
}

Untuk jumlah fungsi yang tidak banyak, penambahan nama seperti ns1_ dan ns2_ tidak terlalu masalah. Akan tetapi untuk program yang kodenya berukuran sangat besar dan memiliki fungsi yang sangat banyak, pengaturan demikian akan menyebabkan maintenance menjadi lebih sulit. Oleh karena itu untuk memudahkan, C++ memiliki fitur yang disebut namespace

namespace ns1 {
    int function(){
        return 1;
    }
}

namespace ns2 {
    int function(){
        return 2;
    }
}

int main(){
    ns1::function();
    ns2::function();
}

Kodenya sekarang jadi terlihat sedikit lebih rapi.

Dan kadang-kadang dalam sebuah kode mungkin kita hanya membutuhkan sebuah namespace saja. Dari situ lah datangnya statement using namespace. Ini akan membuat semua elemen di dalam sebuah namespace dapat langsung diakses tanpa perlu menspesifikasikan namespace elemen tersebut.

namespace ns1 {
    int function1(){
        return 1;
    }
    int function2(){
        return 2;
    }
    int function3(){
        return 3;
    }
    int function4(){
        return 4;
    }
}

using namespace ns1;

int main(){
    function1();
}

Karena di atas kita hanya membutuhkan namespace ns1 saja, dan menuliskan ns1:: berulang-ulang akan sangat merepotkan, maka kita bisa tinggal menggunakan statement using namespace ns1. Saat memanggil fungsi function1 kita tidak perlu lagi menambahkan ns1:: di depannya.

Lalu, untuk memberikan hasil ke sistem grading, biasanya kita membutuhkan perintah untuk menampilkan hasil ke layar/terminal atau lebih tepatnya disebut stdout. Di C++ untuk melakukan hal ini kita membutuhkan perintah cout. Sebenarnya perintah ini berada pada namespace yang bernama std.

Penggunaan sebenarnya adalah sebagai berikut

#include <iostream>

int main(){
    std::cout << "Hello World!";
}

Di depan cout sebenarnya masih perlu dituliskan std::. Dan akan sangat merepotkan jika kita membutuhkannya berulang kali

#include <iostream>

int main(){
    std::cout << "Hello World1" << std::endl;
    std::cout << "Hello World2" << std::endl;
    std::cout << "Hello World3" << std::endl;
    std::cout << "Hello World4" << std::endl;
    std::cout << "Hello World5" << std::endl;
    std::cout << "Hello World6" << std::endl;
}

Kita bisa mengurangi jumlah penulisan std:: dengan menggunakan statement using namespace std; yang membuat semua elemen di dalam namespace std (seperti cout dan endl) dapat langsung diakses.

#include <iostream>

using namespace std;

int main(){
    cout << "Hello World1" << endl;
    cout << "Hello World2" << endl;
    cout << "Hello World3" << endl;
    cout << "Hello World4" << endl;
    cout << "Hello World5" << endl;
    cout << "Hello World6" << endl;
}

Jika nanti sudah berkutat di kode-kode yang berukuran besar dan kompleks, maka akan terasa penggunaan namespace ini.

2 Comments

  1. saya malah menghindari penggunaan “using namespace” supaya gak ada bentrok apabila ada nama fungsi yang sama di namespace yang berbeda :P

    • agree,
      emang penggunaannya gak terlalu disaranin sih kalau dalam best practice di industri.
      cuman ya ini khan kasusnya buat olimpiade komputer yang ukuran kodenya gak besar dan tersebar di berbagai modul. :)


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.

Bergabunglah dengan 32 pengikut lainnya.

%d bloggers like this: