Kadang program perlu menyatakan “belum ada nilainya”: pencarian yang tidak menemukan hasil, pengaturan yang belum diisi pengguna, atau function yang memang tidak menghasilkan apa pun. Python menyediakan penanda khusus untuk keadaan tersebut, yaitu None. Chapter ini membahas nilai None, tipe NoneType yang memilikinya, cara membandingkan yang benar dengan is None, serta pola pemakaian None sebagai argumen default.

Apa itu None #

None adalah satu-satunya nilai dari tipe NoneType. Interpreter Python hanya pernah membuat satu object None di seluruh program (sebuah singleton), sehingga semua penulisan None di mana pun menunjuk ke object yang identik. Nilai None bukan angka nol, bukan string kosong, dan bukan False — None berarti “tidak ada nilai sama sekali”:

python
hasil = None
print(hasil)
print(type(hasil))

Output yang Dihasilkan:

text
None
<class 'NoneType'>

Pada baris kedua, fungsi type() menunjukkan tipe dari nilai yang ditampung hasil, yaitu NoneType. Perlu dicatat, None berbeda dari variabel yang belum pernah diberi nilai sama sekali — membaca nama yang belum di-assign tetap memicu NameError.

Function Tanpa return Mengembalikan None #

Setiap function di Python pasti mengembalikan sesuatu. Jika tidak ada pernyataan return yang dijalankan, function tersebut secara implisit mengembalikan None. Bahkan function sehari-hari seperti print() pun mengembalikan None:

python
hasil = print("Halo, Budi")
print(hasil)

Output yang Dihasilkan:

text
Halo, Budi
None

Pada baris pertama, fungsi print() mencetak Halo, Budi ke terminal, lalu nilai kembaliannya — yaitu None — diikatkan ke variabel hasil. Karena itu baris kedua mencetak None. Perilaku yang sama berlaku untuk semua function tanpa return eksplisit; kita akan membuktikannya lagi nanti saat mendefinisikan function sendiri pada Section Fungsi.

Membandingkan dengan is None #

Ada dua cara membandingkan nilai dengan None:

python
nilai = None
print(nilai == None)
print(nilai is None)

Output yang Dihasilkan:

text
True
True

Kedua perbandingan di atas menghasilkan True, tetapi keduanya tidak setara secara prinsip. Operator == membandingkan nilai dan bisa berperilaku aneh jika object di sisi kiri mendefinisikan aturan kesamaan sendiri, sedangkan operator is membandingkan identitas — apakah kedua nama menunjuk ke object yang sama.

Karena None adalah singleton yang jumlahnya pasti satu, membandingkan identitas adalah cara yang paling tepat dan paling cepat. Konvensi komunitas Python pun tegas: gunakan nilai is None dan nilai is not None, jangan == None.

None sebagai Nilai Default Argumen #

Penggunaan None yang paling sering dijumpai pada kode nyata adalah sebagai nilai default argumen function. Pola ini menandai “pengguna tidak mengisi argumen ini”, berbeda dari nilai kosong seperti "" yang bisa jadi nilai sah yang disengaja:

python
def sapa(nama, pesan=None):
    if pesan is None:
        pesan = "Selamat datang"
    print(pesan + ", " + nama + "!")

sapa("Budi")
sapa("Siti", "Selamat pagi")

Output yang Dihasilkan:

text
Selamat datang, Budi!
Selamat pagi, Siti!

Mari kita telaah baris-baris pentingnya:

  1. Baris 1 (def sapa(nama, pesan=None):): mendefinisikan function sapa dengan argumen pesan yang bawaannya None — artinya “belum diisi”.
  2. Baris 2-3 (if pesan is None:): jika pemanggil tidak mengisi pesan, variabel pesan diberi teks "Selamat datang" di dalam function.
  3. Baris 6 (sapa("Budi")): hanya satu argumen diberikan, sehingga pesan bernilai None dan saluran fallback aktif.
  4. Baris 7 (sapa("Siti", "Selamat pagi")): argumen kedua terisi, sehingga teks tersebut dipakai langsung.