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, danmypy - 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:
blackuntuk formatting konsistenyapfsebagai formatter alternatif di beberapa codebaseisort(atau workflowruff 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
.venvproject, lalu jalankanruff+mypydari integrated terminal. - PyCharm: set project interpreter ke
.venv, aktifkan formatting saat save, dan tambahkanruff/mypysebagai 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