BASE_STATION // GUIDES // PYTHON LANGUAGE

Guide Python untuk Pemula: Arsitektur Bersih dan Eksekusi Sistematis dari Nol

LOG_DATE: 2026.09.29 | AUTHOR: SYSTEM_LEAD
Hardware Subject

Samsung Galaxy Z Fold7 12/512GB - | Hp Lipat AI |

[ HARDWARE LINK ]

Guide Python untuk Pemula: Arsitektur Bersih dan Eksekusi Sistematis

Menulis kode bukan sekadar membuat program berjalan; tujuan utama rekayasa perangkat lunak adalah memproduksi sistem yang modular, mudah dipelihara (maintainable), dan efisien. Di GEARFORGE, kami menerapkan standar ketat bahkan untuk script paling sederhana.

Panduan ini dirancang untuk pemula yang ingin belajar Python dengan paradigma engineering yang tepat dari hari pertama.


1. Setup Lingkungan Pengembangan

Jangan mencemari instalasi global sistem operasi Anda. Selalu isolasi pustaka dependensi proyek menggunakan virtual environment.

Jalankan perintah berikut di terminal:

# Membuat direktori proyek
mkdir python_core && cd python_core

# Inisialisasi virtual environment
python -m venv .venv

# Aktivasi virtual environment (Linux/macOS)
source .venv/bin/activate

# Aktivasi virtual environment (Windows)
# .venv\Scripts\activate

Gunakan IDE standar industri seperti VS Code atau Neovim dengan linter bawaan (flake8 atau ruff).


2. Fondasi Inti: Tipe Data dan Type Hinting

Python adalah bahasa dynamically typed, namun insinyur modern wajib menggunakan type annotations untuk memperjelas kontrak variabel dan mempermudah debugging.

# core_types.py

# Deklarasi variabel dengan type hints
app_name: str = "GearForge Monitor"
max_retries: int = 3
timeout_sec: float = 12.5
is_active: bool = True

# Struktur data dasar: List & Dictionary
supported_protocols: list[str] = ["HTTP", "HTTPS", "gRPC"]
server_config: dict[str, str | int] = {
    "host": "127.0.0.1",
    "port": 8080
}

print(f"{app_name} siap berjalan di port {server_config['port']}.")

3. Logika Alur Kontrol dan Penanganan Error

Struktur kontrol harus ditulis secara deterministik. Hindari nested-if berlebihan (arrow anti-pattern). Gunakan teknik guard clauses dan selalu tangani kegagalan eksekusi secara eksplisit via try-except.

# control_flow.py

def validate_payload_size(byte_size: int) -> bool:
    max_allowed: int = 1024 * 1024  # 1 MB
    
    # Guard clause: Fail fast
    if byte_size <= 0:
        raise ValueError("Ukuran payload tidak valid.")
    
    return byte_size <= max_allowed

try:
    sample_size: int = 2048
    if validate_payload_size(sample_size):
        print("Payload valid: Memulai pemrosesan.")
    else:
        print("Payload ditolak: Ukuran melebihi batas kuota.")
except ValueError as err:
    print(f"Error Validasi: {err}")

4. Modularitas: Fungsi Bersih dan Single Responsibility

Sebuah fungsi hanya boleh melakukan satu hal secara efisien (Single Responsibility Principle). Buat fungsi murni (pure functions) yang menerima input dan mengembalikan output tanpa efek samping (side effects) yang tersembunyi.

# data_processing.py

def sanitize_username(raw_username: str) -> str:
    """Menghapus spasi liar dan mengonversi karakter ke huruf kecil."""
    return raw_username.strip().lower()

def filter_valid_users(users: list[str]) -> list[str]:
    """Mengembalikan daftar pengguna yang memiliki panjang karakter > 3."""
    # Gunakan List Comprehension untuk efisiensi eksekusi
    return [sanitize_username(u) for u in users if len(u.strip()) > 3]

raw_data: list[str] = [" Alice ", "bo", " CHARLIE", " "]
clean_users: list[str] = filter_valid_users(raw_data)
print(clean_users)  # Output: ['alice', 'charlie']

5. Proyek Terapan: Task Engine CLI Sederhana

Integrasikan konsep di atas ke dalam aplikasi Task Management berbasis baris perintah (CLI). Program ini memisahkan layer data dari layer presentasi.

# task_engine.py
import sys
from dataclasses import dataclass

@dataclass
class Task:
    id: int
    title: str
    is_completed: bool = False

class TaskManager:
    def __init__(self) -> None:
        self._tasks: list[Task] = []
        self._counter: int = 1

    def add_task(self, title: str) -> None:
        clean_title = title.strip()
        if not clean_title:
            print("[!] Error: Judul task tidak boleh kosong.")
            return
        self._tasks.append(Task(id=self._counter, title=clean_title))
        self._counter += 1
        print(f"[+] Task berhasil didaftarkan: '{clean_title}'")

    def list_tasks(self) -> None:
        if not self._tasks:
            print("[-] Tidak ada task aktif.")
            return
        print("\n--- DAFTAR TASK ---")
        for task in self._tasks:
            status = "[x]" if task.is_completed else "[ ]"
            print(f"{task.id}. {status} {task.title}")
        print("-------------------\n")

    def complete_task(self, task_id: int) -> None:
        for task in self._tasks:
            if task.id == task_id:
                task.is_completed = True
                print(f"[*] Task ID {task_id} selesai.")
                return
        print(f"[!] Error: Task dengan ID {task_id} tidak ditemukan.")

def main() -> None:
    manager = TaskManager()
    
    while True:
        print("1. Tambah Task | 2. Lihat Task | 3. Selesaikan Task | 4. Keluar")
        pilihan = input("Pilih opsi (1-4): ").strip()
        
        if pilihan == "1":
            title = input("Nama task: ")
            manager.add_task(title)
        elif pilihan == "2":
            manager.list_tasks()
        elif pilihan == "3":
            try:
                task_id = int(input("Masukkan Task ID: "))
                manager.complete_task(task_id)
            except ValueError:
                print("[!] Error: Masukkan angka bulat yang valid.")
        elif pilihan == "4":
            print("Terminasi sistem...")
            sys.exit(0)
        else:
            print("[!] Perintah tidak dikenali.")

if __name__ == "__main__":
    main()

6. Aturan Inti Rekayasa Python GEARFORGE

  1. Patuhi Standar PEP 8: Gunakan 4 spasi untuk indentasi, penamaan snake_case untuk fungsi dan variabel, serta PascalCase untuk kelas.
  2. Tulis Defensive Code: Selalu validasi data masuk dan tangani kasus batas (edge cases).
  3. Hindari Magic Numbers: Jangan gunakan angka literal tanpa konteks. Definisikan sebagai konstanta bertipe huruf kapital (contoh: MAX_WORKERS = 4).
  4. Kendalikan Entry Point: Gunakan blok if __name__ == '__main__': untuk memastikan script aman saat diimpor sebagai modul.