Python

Panduan Belajar Python: Kualitas Kode & Developer Tools

Panduan ini untuk siapa

  • Pembelajar yang menulis project Python multi-file
  • Developer yang ingin style konsisten dan bug lebih sedikit sebelum runtime
  • Tim yang membutuhkan coding standard bersama dan automated checks

Apa yang akan Anda pelajari

  • Mengapa formatting, linting, dan static typing perlu dijalankan otomatis
  • Penggunaan praktis black, ruff, isort, flake8, dan mypy
  • Bagaimana type hints meningkatkan readability dan kepercayaan tooling
  • Cara pre-commit hooks menegakkan kualitas sebelum kode masuk ke riwayat Git
  • Starter quality pipeline pragmatis untuk project Python

Mengapa topik ini penting

Tool kualitas kode menangkap masalah lebih dini dan menjaga style konsisten di seluruh file serta kontributor. Tanpa automasi, aturan kualitas diterapkan tidak merata dan review jadi berisik.

Tujuannya bukan kesempurnaan. Tujuannya adalah feedback loop cepat: format kode, deteksi kesalahan, dan tampilkan potensi isu tipe sebelum berubah menjadi bug production.

Konsep inti

Formatting dan pengaturan import

Formatting tool menghilangkan debat style.

Setup umum:

  • black untuk formatting konsisten
  • yapf sebagai formatter alternatif di beberapa codebase
  • isort (atau workflow ruff format/check) untuk urutan import
python -m pip install black isort
black .
isort .

Contoh command formatter alternatif (yapf):

python -m pip install yapf
yapf -ir .

Formatting otomatis meningkatkan readability dan mengurangi friksi review.

Linting dan static analysis

Lint menemukan pola mencurigakan, variable tidak terpakai, dan pelanggaran style.

ruff adalah opsi all-in-one cepat untuk banyak tim:

python -m pip install ruff
ruff check .

Anda tetap bisa menggunakan flake8 jika project sudah bergantung padanya.

Contoh command flake8:

python -m pip install flake8
flake8 .

Tool static analysis tambahan yang mungkin Anda temui:

  • pyright (type checker cepat)
  • pyre (type checker milik Meta)
  • pydantic (validasi data dengan type hints)
from pydantic import BaseModel


class UserPayload(BaseModel):
	name: str
	age: int

Type hints dan type checking

Type hints membuat API lebih jelas dan membantu tool mendeteksi potensi bug sebelum eksekusi.

def add(a: int, b: int) -> int:
		return a + b

Lakukan type check dengan mypy:

python -m pip install mypy
mypy .

Type hints sangat berguna di batas module dan alur kode yang intensif data.

Contoh module typing:

from typing import Dict, List


def group_by_first_letter(names: List[str]) -> Dict[str, List[str]]:
	result: Dict[str, List[str]] = {}
	for name in names:
		key = name[0].lower()
		result.setdefault(key, []).append(name)
	return result

Panduan langkah demi langkah

Langkah 1 — Instal toolchain kualitas minimal

Di virtual environment aktif Anda:

python -m pip install black ruff mypy pre-commit

Ini memberi formatting, linting, type checking, dan automasi Git hook.

Langkah 2 — Jalankan checks secara manual dulu

Mulai dari command eksplisit agar Anda memahami output-nya.

black .
ruff check .
mypy .

Perbaiki beberapa warning, lalu jalankan ulang sampai bersih.

Langkah 3 — Otomatiskan dengan pre-commit

Buat .pre-commit-config.yaml dengan hook standar:

repos:
	- repo: https://github.com/astral-sh/ruff-pre-commit
		rev: v0.9.10
		hooks:
			- id: ruff
			- id: ruff-format
	- repo: https://github.com/pre-commit/mirrors-mypy
		rev: v1.14.1
		hooks:
			- id: mypy

Lalu instal hook:

pre-commit install

Sekarang checks berjalan otomatis sebelum setiap commit.

Rekomendasi setup VS Code / PyCharm:

  • VS Code: aktifkan format-on-save, pilih .venv project, lalu jalankan ruff + mypy dari integrated terminal.
  • PyCharm: set project interpreter ke .venv, aktifkan formatting saat save, dan tambahkan ruff/mypy sebagai external tools atau run configurations.

Contoh praktis

Contoh 1 — Menangkap bug dengan type checker

def total_price(price: float, quantity: int) -> float:
		return price * quantity


result = total_price("9.99", 3)
print(result)

mypy memberi peringatan karena price mengharapkan float, bukan str.

Expected result (simplified):

error: Argument 1 to "total_price" has incompatible type "str"; expected "float"

Contoh 2 — Lint menangkap import tak terpakai

import math


def greet(name: str) -> str:
		return f"Hello, {name}"

ruff check . melaporkan import math tidak terpakai.

Expected result (simplified):

F401 `math` imported but unused

Feedback cepat seperti ini menjaga codebase tetap bersih seiring waktu.

Kesalahan umum dan cara menghindarinya

  • Menjalankan tool hanya sebelum rilis -> Jalankan dalam loop lokal dan CI untuk kualitas berkelanjutan.
  • Memaksakan terlalu banyak aturan ketat di hari pertama -> Mulai dari ruleset minimal yang praktis.
  • Mengabaikan type hints di public functions -> Tambahkan hint di API boundary terlebih dahulu.
  • Konfigurasi editor tidak selaras dengan tool CLI -> Gunakan pengaturan formatter/linter yang sama di IDE dan CI.

Latihan cepat

  • Tambahkan type hints ke tiga function yang sudah ada di project Anda lalu jalankan mypy.
  • Jalankan ruff check . dan perbaiki setidaknya lima issue yang dilaporkan.
  • Konfigurasikan dan aktifkan pre-commit hooks, lalu buat satu test commit.

Ringkasan utama

  • Tool kualitas otomatis mengurangi bug dan noise dalam code review.
  • Formatting, linting, dan typing saling melengkapi, bukan saling bersaing.
  • Mulai sederhana, jaga aturan tetap konsisten, dan tingkatkan standar secara bertahap.
  • Pre-commit hooks membuat praktik baik menjadi perilaku default.

Langkah berikutnya

Lanjut ke [11. IDE, Editor & Lingkungan Interaktif](./11-ides-editors-and-interactive-environments-ID.md). Di panduan berikutnya, Anda akan menyiapkan lingkungan development produktif di VS Code, PyCharm, dan Jupyter.

No Comments

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.