Belajar dengan membaca secara berurutan

Type Hints — Tinggalkan Niatmu di Kode dengan : int dan -> str

Pelajari type hints Python. Signature fungsi def f(x: int) -> str:, kapan menambah anotasi variabel dan kapan tidak, serta cara IDE memakainya untuk pemeriksaan statis — hands-on.

Artikel ini membahas type hints — alat untuk meninggalkan niat "apa yang masuk ke sini" di dalam kode. Diperkenalkan di Python 3.5, mereka tumbuh lebih ekspresif dengan setiap rilis.

Masalah "Apa Tipenya?" di Bahasa Dinamis

Python adalah bahasa typed dinamis. Tulis value = 10 dan itu int; tulis value = "HELLO" dan nama yang sama sekarang str. Variabel yang sama bisa membalik tipe kapan saja — itu fleksibilitas. Sisi negatifnya adalah saat codebase kamu tumbuh atau tim mulai menyentuhnya, "apa yang dipegang variabel ini?" / "apa yang dikembalikan fungsi ini?" menjadi tidak terjawab dari kode saja.

Type hints meninggalkan informasi itu sebagai anotasi. Mereka tidak mengubah perilaku runtime. Yang mereka lakukan adalah memberi pembaca manusia petunjuk kuat dan membiarkan IDE serta static analyzer menangkap kesalahan tipe sebelumnya.

Fungsi tanpa hint vs dengan hint
calc_tax(price, rate)kirim apa?return apa?tebakan salah-> bugcalc_tax(price: int, rate: float)-> intniat terbacadari tipeIDE (VS Code)memperingatkan
Tanpa hint, pemanggil harus menebak apa seharusnya price. Dengan hint, signature fungsi sendiri memberitahumu tipe input dan output.

Menganotasi Signature Fungsi

Signature fungsi adalah panggung utama untuk type hints. Anotasi argumen sebagai name: type (titik dua lalu tipe setelah nama) dan tipe return sebagai -> type (panah lalu tipe di akhir baris def).

Anatomi signature fungsi
def calc_tax(price: intrate: float) -> int:hint argumen(harap int)hint argumen(harap float)hint return(return int)
Titik dua setelah nama argumen mendeklarasikan tipe argumen, dan panah -> setelah ) mendeklarasikan tipe return. Berpasangan titik dua = anotasi argumen; berpasangan panah = anotasi return.
# ❌ tanpa hint — signature tidak memberitahumu apa yang harus dikirim
def calc_tax(price, rate):
    return int(price * (1 + rate))


# ✅ dengan hint — "int masuk, int keluar" jelas
def calc_tax(price: int, rate: float) -> int:
    return int(price * (1 + rate))


print(calc_tax(price=1000, rate=0.1))   # 1100

Tambah hint argumen dan return ke calc_tax, kalkulator pajak gaya e-commerce.

① Pada def calc_tax(price, rate):, tambah hint price: int dan rate: float.

② Tambah -> int sebelum : untuk mendeklarasikan tipe return.

③ Biarkan body sebagai return int(price * (1 + rate)).

④ Verifikasi dengan print(calc_tax(price=1000, rate=0.1)) (harap 1100).

(Kalau kode kamu berjalan dengan benar, penjelasan akan muncul.)

Python Editor

Jalankan kode untuk melihat output

Anotasi Variabel — Kapan Menulisnya dan Kapan Tidak

Type hints juga bekerja pada variabel — bentuk sama: name: type = value. Tetapi anotasi variabel jadi berisik cepat kalau kamu memakainya berlebihan, dan kebisingan mengurangi keterbacaan.

# ❌ berisik — value sudah memberitahumu tipenya
name: str = "Budi"
age:  int = 30

# ✅ layak dianotasi — container kosong, init ditunda, atau tipe tidak jelas
results: list = []                       # list kosong, akan di-append nanti
cache:   dict = {}                       # mungkin ingin merinci tipe value nanti
user_id: int  = fetch_id_from_session()  # membuat tipe yang diharapkan tempat panggil eksplisit

Saat ragu: "fungsi selalu, variabel jarang"

Di proyek nyata, selalu anotasi signature fungsi dan method, tetapi anotasi variabel hanya saat tipe tidak jelas. age = 30 tidak butuh : int — menambahnya hanya kebisingan.

Type Hints Tidak Ditegakkan saat Runtime

Type hints hanya hint. Python tidak memeriksa atau menegakkannya saat runtime. Fungsi yang dideklarasikan def f(x: int) dengan senang menerima f("abc") — fungsi berjalan seperti biasa. Hanya kemudian, ketika perhitungan jauh di dalam body gagal pada ketidakcocokan tipe, kamu melihat TypeError atau yang serupa — dan itu adalah error runtime dari perhitungan, bukan dari hint itu sendiri.

Lalu kenapa repot? Karena sebelum fungsi pernah berjalan, editor dan static analyzer dapat mendeteksi ketidakcocokan tipe. Pylance VS Code, PyCharm, mypy, pyright — semuanya membaca hint kamu dan menggarisbawahi kesalahan dengan merah, menangkap bug sebelum eksekusi.

Runner Python browser tidak menampilkan peringatan IDE

Console di halaman ini hanya menjalankan kode kamu — itu tidak punya fasilitas pemeriksaan tipe statis seperti VS Code. Jadi menulis atau melanggar type hint tidak pernah menghasilkan garis bawah merah atau peringatan pra-jalan di sini. Manfaat sungguhan type hints — jaring pengaman peringatan editor sebelum kamu menjalankan — hanya muncul secara lokal dengan VS Code, PyCharm, dll.

Tambah type hint ke kedua class User dan fungsi describe_user yang memakainya.

① Definisikan class User: dengan __init__(self, name: str, age: int) yang menetapkan self.name = name dan self.age = age (anotasi argumen constructor juga).

② Tambah method instance greet(self) -> str yang me-return f"Hello, {self.name}" (jangan lupa anotasi return).

③ Di luar class, definisikan describe_user(user: User) -> str yang mengambil instance User dan me-return f"{user.name} ({user.age})".

④ Buat user = User("Budi", 30) dan verifikasi dengan print(user.greet()) dan print(describe_user(user)).

Python Editor

Jalankan kode untuk melihat output

Tiga Tempat Type Hints Berbuah

Tiga manfaat type hints
keterbacaan naikniat terlihatperingatan IDEsaat mengetikanalisis statisdi CI
Di luar keterbacaan, kamu mendapat peringatan IDE real-time dan pemeriksaan statis pra-jalan (mypy / pyright) — pengembalian konkret atas biaya menulis hint.
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Mana cara yang benar untuk menganotasi def add(x, y): agar kedua argumen dan nilai kembali adalah int?

Soal 2Mana pernyataan paling akurat tentang type hints Python?

Soal 3Mana tempat paling direkomendasikan untuk menambah type hints?