Pengecekan Style Guide PEP8

 

Pengecekan Style Guide PEP8

Sampai dengan saat ini, Anda tentu sudah menuliskan kode pemrograman Python cukup banyak, termasuk di antaranya kode yang Anda tulis mengalami kesalahan sintaksis atau indentasi. Lalu, bagaimana agar ke depannya bisa mencegah hal tersebut terjadi?

Semua itu bergantung pada kode editor yang Anda gunakan untuk menulis kode Python, terkadang ada beberapa kode editor yang sudah dilengkapi dengan fitur pengecekan kemungkinan kesalahan dan memformat kode sesuai arahan gaya penulisan (style guide) PEP8, seperti PyCharm. Ada juga kode editor, seperti Visual Studio Code yang menyediakan plugin tambahan untuk membantu pengecekan kemungkinan kesalahan dan memformat kode.

PEP atau Python Enhancement Proposals merupakan panduan yang telah menjadi acuan untuk perkembangan Python. Salah satu panduan tersebut membahas mengenai arahan gaya penulisan (style guide) yang baik dan benar ketika Anda ingin membangun kode menggunakan Python. Panduan tersebut adalah PEP8 yang berjudul "Style Guide for Python Code".

Tujuan dari panduan ini agar kode Anda lebih mudah dibaca dan dipahami oleh programmer lain serta menghindari kemungkinan kesalahan yang akan muncul.

Pada materi kali ini, kita akan mempelajari beberapa aplikasi yang dapat Anda gunakan dengan memanggil perintah atau sebaiknya diintegrasikan ke editor kode yang Anda pakai. Tujuannya untuk membantu Anda mengecek kemungkinan kesalahan dan kesesuaian dengan PEP8.


Lint

Lint adalah proses pengecekan kode atas kemungkinan terjadi kesalahan (error), termasuk dalam proses ini adalah mengecek kesesuaian terhadap arahan gaya penulisan kode (style guide) PEP8. Aplikasi yang digunakan untuk proses ini disebut linter

Integrasi linter dengan editor kode Anda akan membuat efisien dalam menulis kode Python. Pertimbangan ini karena keluaran atau output dari aplikasi linter hanya berupa teks singkat berupa keterangan dan kode Error atau Warning atau Kesalahan Konvensi Penamaan (Naming Conventions).

Lint atau linting akan meminimalkan kode Anda mengalami error, salah satu contohnya karena kesalahan indentasi di Python. Sebelum kode Anda diproses oleh interpreter Python dengan IndentationError, lint akan memberitahukannya lebih dahulu ke Anda.

Berikut akan dibahas tiga jenis aplikasi linter, silakan dicermati dahulu. Tidak harus semuanya diinstal/dicoba, hanya paket yang menurut Anda sesuai kebutuhan saja yang digunakan. Untuk menginstalnya, silakan buka terminal Anda dan jalankan kode di bawah ini sesuai yang Anda pilih.

Catatan: Output ketiga aplikasi ini kemungkinan mirip, tetapi pada kondisi tertentu akan ada output atau fitur yang mungkin sesuai dengan kebutuhan Anda menulis kode.

  1. Pycodestyle (sebelumnya bernama pep8)
    Pycodestyle adalah aplikasi open source (berlisensi MIT/Expat) untuk membantu mengecek kode terkait gaya penulisan kode dengan konvensi PEP8. Untuk instalasi, silakan buka terminal Anda dan jalankan kode berikut.
    pip install pycodestyle
  1. Pylint
    Pylint adalah aplikasi open source (berlisensi GPL v2) untuk melakukan analisis kode Python, mengecek untuk kesalahan (error) pemrograman, memaksakan standar penulisan kode dengan mengecek penulisan kode yang tidak baik, serta memberikan saran untuk refactoring sederhana. Untuk instalasi, silakan buka terminal Anda dan jalankan kode berikut.
    pip install pylint
  1. Flake8
    Flake8 adalah aplikasi open source (berlisensi MIT) yang membungkus sejumlah kemampuan aplikasi lain, seperti pycodestyle, pyflakes, dan (skrip/fitur) lainnya. Untuk instalasi, silakan buka terminal Anda dan jalankan kode berikut.
    pip install flake8

Selanjutnya, mari kita masuk ke pembahasan cara kerja ketiganya. Pastikan Anda sudah menginstal aplikasi yang disebutkan sebelumnya. 

  1. Masuk ke kode editor Anda, misalnya Visual Studio Code.
  2. Buat sebuah file bernama kalkulator.py dan masukkan kode berikut.
    1. class Kalkulator:
    2.     """kalkulator tambah kurang"""
    3.     def __init__(self, _i):
    4.         self.i = _i
    5.     def tambah(self, _i): return self.i + _i
    6.     def kurang(self, _i):
    7.     return self.i - _i
    Pada kode di atas, kita membuat kelas bernama Kalkulator. Kelas ini memiliki dua metode, yaitu tambah dan kurang. Atribut yang dimiliki kelas ini hanyalah variabel "i".

    Berdasarkan PEP8, kode tersebut masih perlu diperbaiki dan ada blok kode yang akan menghasilkan error. Kita akan mengetahuinya nanti.
  1. Mari kita jalankan file atau script tersebut dengan aplikasi yang telah diinstal. Buka kembali terminal Anda, pastikan membuka direktori tempat file atau script Anda berada.
    1. Pycodestyle
      Untuk menguji menggunakan pycodestyle, jalankan kode berikut.
      pycodestyle kalkulator.py
      Output yang dihasilkan adalah berikut.
      dos:138a11d39cda96e183b2a5b32b3c5e3f20230823192816.pngGambar di atas adalah tampilan terminal ketika Anda menjalankan script menggunakan pycodestyle.
    2. Pylint
      Untuk menguji menggunakan pylint, jalankan kode berikut.
      pylint kalkulator.py
      Output yang dihasilkan adalah berikut.
      dos:248507f072ac6c74341b8903ced0d07820230823192952.pngGambar di atas adalah tampilan terminal ketika Anda menjalankan script menggunakan pylint
    3. Flake8
      Untuk menguji menggunakan flake8, jalankan kode berikut.
      flake8 kalkulator.py 
      Output yang dihasilkan adalah berikut.
      dos:91b4268978cf80b7d39ef3c8aad4c7c020230823193054.pngGambar di atas adalah tampilan terminal ketika Anda menjalankan script menggunakan flake8.

Pesan dari ketiga aplikasi tersebut ternyata beragam, tetapi ada satu kesamaan, yakni ketiganya menunjukkan pola yang sama di awal pesan berupa nama file diikuti dengan baris dan kolom.

dos:229d7b4243edfb42235e72c531c1c2c120230823192255.jpeg

Untuk mengetahui mana baris dan kolom, perhatikan gambar di bawah ini.

dos:d7e37b7d7642eee485b9d7d4226a0aa720230823192255.jpeg

Gambar di atas menunjukkan baris dan kolom dari kode yang telah kita buat sebelumnya. Kita ambil satu contoh, ketika menggunakan pylint pesan yang ditampilkan adalah "kalkulator.py 7:5 Parsing failed: 'expected an indented block after function definition on line 6 (<unknown>, line 7)' (syntax-error).". Ini artinya pylint menunjukkan bahwa pada baris 7 kolom ke-5 seharusnya memiliki indentasi setelah mendefinisikan fungsi di baris ke-6. 

Baik flake8 maupun pylint, keduanya memberikan pesan bahwa ada error indentasi, sedangkan pada pycodestyle format kode juga dicek sesuai PEP8 sehingga akan menghasilkan pesan yang berbeda, yakni error indentasi dan blank line.

Mari perbaiki kodenya, silakan ganti dengan kode berikut.

  1. class Kalkulator:
  2.     """kalkulator tambah kurang"""
  3.     def __init__(self, _i):
  4.         self.i = _i
  5.  
  6.     def tambah(self, _i): return self.i + _i
  7.  
  8.     def kurang(self, _i):
  9.         return self.i - _i

Pada kode di atas, kita telah melakukan beberapa perbaikan. Pertama adalah kita menambahkan new line (garis baru) pada setiap penulisan setelah blok fungsi, sekarang setiap fungsinya dipisahkan oleh satu baris kosong. Kedua, kita menambahkan indentasi pada metode "kurang". 

Kemudian jalankan kembali file tersebut menggunakan ketiga aplikasi yang sebelumnya digunakan.

Jika diproses menggunakan pycodestyle dan flake8, itu tidak akan memunculkan pesan seperti gambar di bawah ini. Hal ini berarti menjelaskan kodenya sudah lebih baik.

dos:bf00db5ba34d695e76db376948c4865420230823192254.jpeg

Namun, ketika Anda menjalankannya menggunakan pylint, beberapa pesan peringatan muncul. Hal ini karena kita perlu menambahkan dokumentasi pada setiap fungsi dan kelas yang dibangun. Tidak apa-apa, itu merupakan peringatan untuk membuat kode kita lebih sempurna.

dos:e67c91e8a3997ebe3ffd5de5c75c2b1420230823192255.jpeg

Memformat Kode

Jika proses lint atau linting hanya melakukan pengecekan, kali ini adalah arahan gaya penulisan kode agar bisa sesuai dengan PEP8. Kita akan kembali menggunakan beberapa aplikasi yang nantinya akan diinstal. 

Proses memformat kode akan sama dengan cara melakukan proses linting, yaitu kita akan mengeksekusi script. Perbedaannya adalah output yang dihasilkan. Jika proses linting menghasilkan pesan dengan menunjukkan baris dan kode yang mengalami kesalahan, proses memformat kode akan memberikan pesan berupa kode yang telah diperbaiki. Ini artinya Anda tidak perlu mengubah kode secara manual.

Berikut adalah tiga jenis aplikasi untuk memformat kode, silakan dicermati dahulu. Tidak harus semuanya diinstal, hanya paket yang menurut Anda sesuai kebutuhan saja yang digunakan.

  1. black
    black adalah proyek open source yang dikembangkan di repository Python Software Foundation (PSF) dengan lisensi MIT. Untuk mendapatkan gambaran, versi online (tidak resmi) ada di https://black.now.sh.

    Untuk instalasi, silakan buka terminal Anda dan jalankan kode berikut.
    pip install black
  1. YAPF (Yet Another Python Formatter)
    YAPF adalah proyek open source yang dikembangkan di repository Google dengan lisensi Apache.

    Untuk instalasi, silakan buka terminal Anda dan jalankan kode berikut.
    pip install yapf
  1. autopep8
    autopep8 adalah proyek open source (berlisensi MIT) yang termasuk paling awal untuk memformat kode dengan bantuan lint pycodestyle.

    Untuk instalasi, silakan buka terminal Anda dan jalankan kode berikut.
    pip install autopep8

Selanjutnya, mari kita masuk ke pembahasan cara kerja ketiganya. Kita akan menggunakan kode yang sama seperti sebelumnya, yaitu kalkulator.py. Pastikan Anda sudah menginstal aplikasi yang disebutkan sebelumnya.

  1. Buka script kalkulator.py dan salin kode berikut.
    1. class Kalkulator:
    2.     """kalkulator tambah kurang"""
    3.     def __init__(self, _i):
    4.         self.i = _i
    5.     def tambah(self, _i): return self.i + _i
    6.     def kurang(self, _i):
    7.         return self.i - _i
    Contoh di atas merupakan kode kalkulator yang sama seperti materi sebelumnya, saat kita mendefinisikan kelas kalkulator dengan dua metode, yaitu tambah dan kurang serta satu atribut objek.
  1. Mari jalankan file atau script tersebut dengan aplikasi yang telah kita instal. Buka kembali terminal Anda, pastikan membuka direktori tempat file atau script Anda berada.
    1. black
      Untuk menguji menggunakan black, jalankan kode berikut.
      black kalkulator.py
      Ketika Anda menjalankan perintah di atas, kode yang berada di dalam kalkulator.py akan mengalami perubahan. Silakan cek kembali kode dalam file Anda.
    2. yapf
      Untuk menguji menggunakan yapf, jalankan kode berikut.
      yapf kalkulator.py
      Ketika Anda menjalankan perintah di atas, tidak akan mengubah kode Anda secara langsung, seperti black. Namun, yapf akan memberikan saran kode melalui terminal.
      dos:cf1f60b0fa519d9814e994ff3e37fbd220230823193800.pngGambar di atas adalah tampilan layar terminal menunjukkan saran kode yang telah diperbaiki oleh yapf.
    3. autopep8
      Cara kerja autopep8 dapat seperti yapf yang akan memberi saran kode ke layar terminal atau seperti black yang akan mengubah langsung isi file kalkulator.py.

      Jika Anda ingin autopep8 memberikan saran kode, silakan jalankan kode berikut.
      autopep8 kalkulator.py
      Ketika dijalankan, layar akan memunculkan saran kode yang telah diperbaiki seperti pada gambar berikut.
      dos:30f97cfbed4e720b5a76ef2b2ff807b920230823193847.pngJika Anda ingin mengubah kode file secara langsung, silakan jalankan kode berikut dan periksa kembali file kode Anda.
      autopep8 --in-place --aggressive --aggressive kalkulator.py

Setelah mempelajari kedua mekanisme: pengecekan gaya penulisan (style guide) dan proses memformat kode, Anda tinggal fokus dengan penulisan indentasi dalam kode Python. Untuk format sisanya, aplikasi-aplikasi yang telah kita pelajari di atas dapat membantu.

Jika Anda menulis dengan editor kode yang sangat sederhana, anggap saja seperti notepad di Windows atau pico/nano di Linux, dalam menuliskan kode Python cukup perhatikan indentasi untuk setiap baris pernyataan (statement). Setelah selesai menuliskan kodenya, simpan kodenya sebagai file .py, lalu eksekusi perintah linter atau langsung eksekusi perintah aplikasi untuk memformat kode. Hasilnya, kode Anda sudah dirapikan sesuai arahan gaya penulisan PEP8 juga dilakukan pengecekan terhadap kemungkinan kesalahan (jika Anda lakukan linting).

Untuk Anda yang mengikuti instalasi editor kode PyCharm dalam materi awal, secara bawaan sudah menggunakan fitur inspeksi dengan kemampuan yang kurang lebih sama. Namun jika Anda mau, bisa juga menambahkan aplikasi lint yang sudah dijelaskan sebagai tambahan dari bawaan. Demikian juga untuk fitur format ulang kode juga tersedia secara bawaan di aplikasi PyCharm.

Style Guide Statement Gabungan

Setelah mengetahui aplikasi untuk pengecekan dan memformat kode, kali ini kita akan belajar cara membuat kode yang baik dan benar. Perhatikan bahwa materi ini akan menunjukkan sintaks yang disarankan dan tidak disarankan.


Statement Gabungan

Saat Anda membuat program dengan banyak statement, usahakan untuk tidak menggabungkan >1 statement pada baris yang sama.


Disarankan seperti ini.

  1. if foo == 'blah':
  2.     do_blah_thing()
  3. do_one()
  4. do_two()
  5. do_three()

Tidak disarankan seperti ini.

  1. if foo == 'blah': do_blah_thing()
  2. do_one(); do_two(); do_three()

Anda diperbolehkan untuk membuat sebuah konten/isi dari if/for/while yang cukup pendek untuk diletakkan dalam satu baris (program tetap berjalan). Namun, pastikan tidak melakukannya jika if/for/while Anda bertingkat atau bersifat multi clause, misalnya if-else, try-finally, dan sebagainya.

Tidak disarankan seperti ini.

  1. if foo == 'blah': do_blah_thing()
  2. for x in lst: total += x
  3. while t < 10: t = delay()

Sangat tidak disarankan seperti ini.

  1. if foo == 'blah': do_blah_thing()
  2. else: do_non_blah_thing()
  3. try: something()
  4. finally: cleanup()
  5. do_one(); do_two(); do_three(long, argument,
  6.                              list, like, this)
  7. if foo == 'blah': one(); two(); three()


Penggunaan Trailing Commas

Koma di bagian akhir (trailing commas) umumnya bersifat opsional, satu statement yang bersifat wajib adalah saat kita membuat variabel menggunakan tipe tuple dengan satu elemen. Hal ini umumnya diperjelas dengan kurung untuk menghindari penghapusan atau pembersihan.

Disarankan seperti ini.

  1. FILES = ('setup.cfg',)

Tidak disarankan seperti ini.

  1. FILES = 'setup.cfg',

Saat trailing comma bersifat redundan, Anda akan merasakan kemudahannya saat menggunakan VCS (Version Control System), atau pada kode yang mungkin ditambahkan dalam beberapa waktu ke depan. Pola yang disarankan adalah meletakkan nilai atau string pada sebuah baris baru, mengikuti indentasi, menambahkan trailing comma, dan menutup kurung/kurawal/siku pada baris selanjutnya.

Tidak umum jika Anda menempatkan trailing comma pada baris letak Anda menutup kurung/kurawal/siku seperti di bawah ini, kecuali dalam tuple dengan satu elemen, seperti yang dijelaskan di atas.

Disarankan seperti ini.

  1. FILES = [
  2.     'setup.cfg',
  3.     'tox.ini',
  4.     ]
  5. initialize(FILES,
  6.            error=True,
  7.            )

Tidak disarankan seperti ini.

  1. FILES = ['setup.cfg', 'tox.ini',]
  2. initialize(FILES, error=True,)


Anotasi Fungsi

Anotasi fungsi adalah fitur yang memungkinkan kita untuk menambahkan informasi tambahan tentang parameter dan return value dari sebuah fungsi. Jika sebelumnya kita belajar menambahkan informasi terkait fungsi dengan menambahkan docstring, anotasi fungsi lebih spesifik untuk menjelaskan parameter dan return value.

Penggunaan anotasi fungsi sebaiknya menggunakan aturan baku untuk titik dua (:) dan menggunakan spasi untuk penggunaan arah panah atau arrow (->). Hal ini disebut sebagai type hints yang merujuk pada PEP 484.

  1. # Perhatikan penggunaan spasi dari kedua kode berikut.
  2. Yes:
  3. def munge(input: str):  # Menambahkan informasi parameter bertipe string
  4.     pass
  5. def munge() -> str:   # Menambahkan informasi return value bertipe string
  6.     pass
  7. No:
  8. def munge(input:str):  # Menambahkan informasi parameter bertipe string
  9.     pass
  10. def munge()->str:   # Menambahkan informasi return value bertipe string
  11.     pass

Pada contoh di atas, kita memberikan informasi bahwa parameter dan return value harus berupa tipe data string. Kita bisa menentukannya dengan tipe lain, seperti 'int' untuk integer dan 'float' untuk tipe data float.

Selanjutnya, saat membuat fungsi dan Anda menggabungkan anotasi dengan nilai parameter, sebaiknya tetap menggunakan spasi baik sebelum dan sesudah tanda sama dengan (=).

  1. def LuasPersegiPanjang(panjang: int = 2, lebar: int = None):
  2.     pass

Pada contoh di atas, kita membuat fungsi bernama "LuasPersegiPanjang" untuk mencari luas persegi panjang dengan parameter panjang dan lebar. Sintaks berikut menjelaskan bahwa parameter panjang dan lebar harus bertipe data integer.

  1. panjang: int

Sementara itu, ketika menambahkan variabel setelah sama dengan (=) akan memberikan nilai default. Contohnya sintaks berikut akan memberikan nilai default 2 untuk parameter panjang.

  1. panjang: int = 2

Sekarang mari lihat contoh keseluruhan kode dan cara memanggilnya.

Pada contoh di atas, kita membuat fungsi untuk mencari luas persegi panjang dengan parameter panjang dan lebar. Perlu diingat bahwa pada fungsi tersebut kita memberikan nilai default 2 untuk parameter panjang. Hal ini mengakibatkan bahwa ketika memanggil fungsi LuasPersegiPanjang dengan hanya memasukkan argumen lebar, program akan tetap berjalan dengan baik.

Namun, perlu diingat bahwa karena type hints bersifat optional dan memberikan petunjuk, jika pada fungsi LuasPersegiPanjang kita memberikan tipe data float, program akan tetap berjalan sebagaimana mestinya. 

Sekarang, kita masuk ke skenario baru. Jika pada saat membuat fungsi tanpa adanya anotasi bahwa parameternya menandakan keyword argumen atau nilai default, hindari penggunaan spasi di sekitar tanda sama dengan (=).

  1. Yes:
  2. def LuasPersegiPanjang(panjang=2, lebar=None):
  3.     luas = panjang*lebar
  4.     return luas
  5. No:
  6. def LuasPersegiPanjang(panjang = 2, lebar = None):
  7.     luas = panjang*lebar
  8.     return luas

Pada contoh di atas, kita membuat fungsi luas persegi panjang yang sama seperti sebelumnya. Perhatikan bahwa kita tidak menyertakan anotasi berupa "panjang:int".

Mari kita simpulkan sedikit. Jika kita membuat fungsi yang menggabungkan anotasi dengan nilai parameter, sebaiknya tetap menggunakan spasi sebelum dan sesudah tanda sama dengan (=). Namun, ketika membuat fungsi biasa tanpa adanya anotasi, sebaiknya tidak menggunakan spasi sebelum dan sesudah tanda sama dengan (=).

  1. Yes:
  2. def LuasPersegiPanjang(panjang:int = 2, lebar=None):
  3.     pass
  4.  
  5. No:
  6. def LuasPersegiPanjang(panjang: int=2, lebar = None):
  7.     pass

Pada contoh di atas, kita menggabungkan dalam satu fungsi; parameter panjang menggabungkan anotasi fungsi dan nilai default, sedangkan parameter lebar hanya mendefinisikan nilai default tanpa anotasi fungsi. Perhatikan bahwa spasi ditempatkan pada setiap parameternya.

Style Guide Prinsip Penamaan pada Python

Saat membuat variabel, fungsi, hingga kelas, Anda dapat memberikan nama-nama yang beragam. Terkadang, keberagaman tersebut menghasilkan tidak adanya standar dalam kode yang Anda bangun.

Pada materi ini, kita akan belajar beberapa prinsip penamaan saat Anda membangun kode Python. Harapannya, Anda bisa membuat standar nama saat membangun variabel, fungsi, hingga kelas. 

Namun, perlu diperhatikan juga bahwa Anda dapat memilih mempertahankan styling yang sudah digunakan sebelumnya untuk menjaga konsistensi internal tim atau perusahaan. Ini karena konsistensi internal lebih diutamakan.

Catatan: Pada materi-materi sebelumnya, style guide Python belum diterapkan secara menyeluruh. Sangat disarankan jika Anda mempelajari ulang kode pada materi-materi sebelumnya dengan menerapkan style guide Python.

Prinsip Overriding

Nama yang dilihat oleh user publik sebaiknya merefleksikan penggunaan/fungsinya dan bukan implementasinya. Misalnya nama fungsi berikut.

  1. cariJalan()

Itu akan lebih mudah dipahami dibanding berikut.

  1. jalan()

Algoritma yang digunakan hingga informasi lainnya dari fungsi yang dibangun dapat dijelaskan dalam docstring ataupun komentar.


Penamaan Deskriptif

Penamaan deskriptif adalah cara untuk memberikan nama yang informatif, jelas, dan sesuai dengan tujuan dari elemen kode. Penamaan deskriptif ini meliputi variabel, fungsi, kelas, hingga konstanta.

Ada berbagai cara penamaan yang umum digunakan dalam Python. Pemilihan cara penamaan ini penting untuk menjaga konsistensi dan kejelasan kode. Penamaan ini juga merujuk pada PEP8 mengenai Naming Conventions dan Naming Styles.

Berikut adalah beberapa cara penamaan yang umum.

  1. Satu karakter huruf kecil: b
  2. Satu karakter huruf besar: B
  3. Huruf kecil: hurufkecil
  4. Huruf kecil dengan pemisah kata garis bawah: huruf_kecil_dengan_pemisah_kata_garis_bawah
  5. Huruf Besar: HURUFBESAR
  6. Huruf Besar dengan pemisah garis bawah: HURUF_BESAR_DENGAN_PEMISAH_GARIS_BAWAH
  7. Huruf Besar di Awal Kata (CapWords, PascalCase): HurufBesarDiAwalKata (pastikan semua singkatan/akronim dituliskan dengan huruf besar, misalnya HTTPServerError, bukan HttpServerError)
  8. Huruf Campuran: hurufCampuran (mirip dengan CapWords, hanya berbeda di karakter paling awal)
  9. Huruf Besar di Awal Kata dengan Garis Bawah: Huruf_Besar_Di_Awal_Kata_Dengan_Garis_Bawah

Satu hal yang perlu diingat ketika Anda membuat sebuah fungsi, sangat tidak disarankan untuk menggunakan frasa atau huruf sebagai awalan fungsi. Awalan fungsi mengacu pada nama fungsi di bagian awal, seperti 'get' pada "get_name()" atau 'konversi' pada "konversi_ke_integer()". 

Python tidak menyarankan atau lebih tepatnya tidak dibutuhkan jika Anda membuat sebuah fungsi yang diawali huruf atau frasa, seperti 'f' jika fungsinya 'f_mean()',  'r' jika fungsinya 'r_name()', dan sebagainya. Python memiliki prinsip yang berlaku dalam penamaan fungsi atau method sebagai berikut.

  1. Atribut dan method name bersifat pre-fixed dengan objek.
  2. Function name selalu diawali dengan module name.

Selain penggunaan huruf atau frase yang tidak direkomendasikan, berikut adalah beberapa bentuk penamaan khusus yang umum ditemukan dalam penamaan fungsi. Ini juga bisa Anda terapkan pada penamaan variabel dan kelas.

  1. _diawali_sebuah_garis_bawah: penamaan ini dapat digunakan untuk penggunaan internal lemah yang merujuk pada penggunaannya dengan lingkup tertentu.
  2. diakhiri_sebuah_garis bawah_: penamaan ini digunakan untuk mengatasi redundan dengan keyword/reserved words di Python.
  3. __diawali_dua_garis bawah: menegaskan bahwa sebuah objek adalah bagian dari kelas tertentu.
  4. __diawali_dan_diakhiri_dua_garis bawah__: Objek atau atribut tertentu yang diciptakan Python untuk digunakan dalam program. Contohnya adalah  __init__, __import__ or __file__.

    Ingat, penamaan ini disebut juga sebagai dunder atau double underscore oleh programmer Python. Anda sangat tidak disarankan membuat penamaan menggunakan dunder. Misalnya Anda membuat penamaan "__special_method__", itu sangat tidak disarankan oleh Python karena bisa ada kemungkinan penamaan tersebut telah digunakan oleh Python dan secara tidak sengaja menimpa kode yang sudah ada. Terkecuali penamaan tersebut sudah terdokumentasikan oleh Python seperti '__init__' yang digunakan untuk membuat class constructor.


Hal-hal yang Harus Dipertimbangkan dalam Penamaan

Sebelumnya kita membahas detail terkait penamaan sebuah fungsi, method, kelas, hingga hal yang tidak dianjurkan dalam penamaannya. Pembahasan selanjutnya adalah petunjuk untuk mempertimbangkan nama yang tepat. Sekali lagi, penamaan di sini merujuk ke banyak hal, seperti penamaan variabel, fungsi, hingga kelas.

Nama yang Dihindari

Hindari karakter l (huruf L kecil), O (huruf o besar), atau I (huruf i besar) sebagai nama variabel satu karakter karena mereka sulit dibedakan dengan angka satu dan nol. Daripada menggunakan l (huruf l kecil), menggunakan L besar akan sangat membantu.


ASCII Compatibility

Merujuk pada PEP 3131,  suatu identifiers yang digunakan dalam Python Standard Library harus kompatibel dengan kode ASCII. ASCII adalah sebuah kode karakter yang memetakan set karakter dan umum digunakan dalam angka. Sederhananya, ASCII memetakan karakter-karakter beserta angka yang mewakilinya.

Identifiers merujuk pada nama-nama yang digunakan untuk menyebut variabel, fungsi, kelas, dan kode lainnya dalam Python. Contoh identifiers adalah nama variabel "x", nama fungsi "penjumlahan()", atau nama method "get_nama()".


Nama Paket dan Nama Modul

Masih ingat dengan modul dan package (paket) dalam Python? Modul pada Python adalah file yang berisi kode Python, seperti fungsi, kelas, dan sebagainya. Ketika Anda membuat script atau file Python, hal itu bisa dianggap sebagai modul. Di sisi lain, paket adalah sebuah direktori yang berisi satu atau lebih modul yang terkait dan saling berhubungan.

Penamaan modul sebaiknya pendek atau singkat, menggunakan huruf kecil, dan opsional garis bawah (_) untuk meningkatkan keterbacaan. Contohnya '__init__.py' atau modul 'math_operations.py' dengan seluruh kode di dalamnya merupakan fungsi, kelas, method yang berhubungan dengan operasi matematika, seperti penjumlahan, pengurangan, dan sebagainya.

Nama paket juga sebaiknya singkat, menggunakan huruf kecil, dan hindari garis bawah(_). Contohnya, jika kita membuat paket bernama "math" yang di dalamnya ada modul 'math_operations.py", pengguna akan memahami bahwa paketnya bernama math yang memiliki banyak modul, seperti salah satunya operasi matematika.


Nama Kelas

Saat menamai kelas, gunakan CamelCase atau CapWords. Pastikan semua akronim (misal HTTP) ditulis keseluruhan dengan huruf besar.


Penulisan Tipe Variabel

Untuk penamaan variabel, umumnya menggunakan CamelCase atau CapWords, lebih pendek lebih baik.

T, AnyStr, Num

Jika terdapat covariant atau contravariant dari sebuah variabel, tambahkan di akhir variabel untuk mempermudah pembacaan. Covariant memungkinkan Anda menggunakan tipe turunan (lebih spesifik) dari yang telah ditentukan sebelumnya. Adapun, contravariant adalah istilah yang merujuk pada kemampuan untuk menggunakan tipe yang lebih umum dari sebelumnya.

  1. from typing import TypeVar
  2. VT_co = TypeVar('VT_co', covariant=True)
  3. KT_contra = TypeVar('KT_contra', contravariant=True)


Nama Exception

Untuk pengecualian (exception), Anda juga menerapkan konvensi penamaan kelas pada exception karena ia seharusnya bertipe kelas. Bedanya, tambahkan "Error" atau nama deskriptif lain pada nama exception Anda. Contoh kodenya sebagai berikut.

Pada contoh di atas, kita membuat sebuah pengecualian berasal dari kelas yang dibuat. Kita membuat kelas bernama "DivideByZeroError" yang menginduk pada kelas Exception dari Python. Perhatikan bahwa kita menempatkan kata error di akhir penamaannya.


Nama Variabel Global

Dalam variabel global, penamaannya bisa mengikuti fungsi/modul yang bersifat publik. Anda bisa menggunakan garis bawah untuk menghindari variabel tersebut diimpor jika ia termasuk modul non-publik.


Nama Fungsi, Parameter, dan Variabel

Nama fungsi, parameter, dan variabel sebaiknya menggunakan huruf kecil dengan pemisahan menggunakan garis bawah untuk meningkatkan keterbacaan. mixedCase dapat digunakan jika ada dependensi dengan pustaka menggunakan style tertentu.


Argumen Fungsi dan Method

Dalam pembuatan fungsi dan method pada suatu kelas, ada beberapa hal yang perlu dipertimbangkan.

  • Gunakan self sebagai argumen pertama jika Anda membuat instance method.
  • Gunakan cls sebagai argumen pertama ketika Anda membuat class method.

Jika nama argumen fungsi adalah reserved keyword, tambahkan garis bawah di akhir nama argumen. Jangan mengorbankan keterbacaan nama dengan menyingkatnya. Mengganti argumen bernama class dengan class_ atau kelas, lebih baik daripada clss.


Nama Method dan Variabel Instance

Saat membuat method dan variabel dalam suatu kelas, gunakan standar penamaan fungsi, yaitu gunakan huruf kecil dengan pemisah kata garis bawah untuk meningkatkan keterbacaan. Tambahkan garis bawah sebagai awalan untuk method non-publik dan variabel internal pada fungsi.

Untuk menghindari kesamaan dengan subkelas, gunakan __dimulai_dua_garis_nama_method untuk memanggil proses yang tepat. Python menggabungkan nama modul dengan nama kelas. Misal ada suatu kelas bernama Foo, jika kelas Foo memiliki atribut __a, kita tidak dapat mengaksesnya melalui Foo.__a, tetapi Foo._Foo__a. Mulai dengan dua garis bawah hanya digunakan jika terjadi konflik dengan atribut di kelas atau subkelas lainnya.


Konstanta

Dalam memberikan nama variabel bertipe konstanta, umumnya didefinisikan pada bagian atas modul dengan huruf besar semuanya, misalnya 'PI = 3,14'  atau  'TOTAL = 4.14213'.


Selalu Persiapkan untuk Inheritance

Saat membangun metode dan variabel dalam sebuah kelas, sebaiknya Anda dapat langsung mengetahui atribut pada metode dan variabel tersebut, entah publik atau non-publik. Jika Anda ragu, jadikan atributnya non-publik. Sebab, lebih mudah menjadikan sebuah variabel/method bersifat non-publik menjadi publik, dibandingkan sebaliknya.

Variabel atau method bersifat non-publik adalah suatu variabel atau method yang hanya digunakan untuk lingkup tertentu dan tidak diakses secara langsung di luar. Contohnya berikut.

Pada contoh di atas, method '_private_method' merupakan jenis fungsi yang tidak diakses secara langsung. Anda bisa melihat pada method 'public_method', tempat kita menggunakan method private di sana. Selain itu, variabel seperti '_private_var' atau '_secret_list' merupakan variabel non_publik yang tidak digunakan secara langsung ketika kelas dipanggil.

Method/Variabel publik dipersiapkan untuk pihak eksternal menggunakan kelas Anda. Anda juga otomatis berkomitmen untuk menghindari adanya incompatible backward changes atau suatu kode yang tidak dapat berjalan kembali setelah adanya perubahan. 

Sebaliknya, method/variabel dengan atribut non-publik hanya digunakan oleh Anda sebagai developer. Itu juga tidak memberikan garansi kepada siapa pun bahwa Anda takkan mengubah atau menghapusnya. Di sini kita tidak menggunakan atribut private karena dalam Python tidak ada atribut yang benar-benar private.

Kategori lain dari atribut adalah "subclass API", umumnya disebut protected pada bahasa lain. Sebuah kelas dapat didesain untuk diwariskan (inherited-from), misalnya untuk memodifikasi atau menjadi ekstensi dari perilaku (behavior) kelas. Dalam mendesain kelas-kelas sejenis, pastikan untuk membuat keputusan eksplisit, variabel/method yang memiliki atribut publik, bagian dari subclass API, dan yang hanya anda gunakan secara internal.

Saat mendeklarasikan variabel/method tersebut, ikuti panduan Pythonic berikut.

  1. Atribut publik tidak menggunakan awalan garis bawah.
  2. Jika nama sebuah method/variabel publik sama dengan reserved keyword, tambahkan akhiran garis bawah. Hindari menyingkat atau mengurangi huruf.
  3. Pada data publik yang bersifat simpel, hindari nama yang terlalu panjang. Cukup dengan nama atribut sependek mungkin. Ingatlah bahwa pada masa depan Anda akan mungkin mengembangkan skema atau data ini sehingga nama sependek apa pun mungkin akan menguntungkan Anda.
  4. Jika Anda berniat untuk mewariskan atau membuat subclass dari kelas dan menginginkan sebuah variabel hanya digunakan di kelas utama saja, tambahkan awalan dua garis bawah. Ini akan memudahkan Anda karena Python mengenalinya sebagai konvensi kelas, untuk menghindari kemungkinan kesamaan nama atau implementasi.

Sekali lagi, semua materi style guide kali ini mengacu pada PEP8 yang dapat Anda baca lebih lanjut dalam link berikut.

Rangkuman Style Guide pada Python

Kita sudah berada di penghujung materi style guide pada Python. Sampai sejauh ini, Anda diharapkan paham untuk memahami cara membangun kode Python yang lebih baik dan benar sesuai panduan yang telah diberikan oleh Python melalui PEP8. Mari kita rangkum secara saksama.


Pengecekan Style Guide PEP8

Saat membangun program pada Python, seringkali kode yang dibuat 'cukup berantakan' sehingga kita perlu mengecek bahwa kode tersebut sudah rapi dan benar dengan mengacu pada panduan yang telah diberikan oleh Python, yaitu PEP 8. 

PEP atau Python Enhancement Proposals adalah panduan yang telah menjadi acuan untuk perkembangan Python. Salah satu panduan tersebut membahas mengenai arahan gaya penulisan (style guide) yang baik dan benar ketika Anda ingin membangun kode menggunakan Python. Panduan tersebut adalah PEP8 yang berjudul "Style Guide for Python Code".

Tujuan dari panduan ini agar kode Anda lebih mudah dibaca dan dipahami oleh programmer lain serta menghindari kemungkinan kesalahan yang akan muncul.


Lint

Lint atau linting adalah proses pengecekan kode atas kemungkinan terjadi kesalahan (error), termasuk dalam proses ini adalah mengecek kesesuaian terhadap arahan gaya penulisan kode (style guide) PEP8. Aplikasi yang digunakan untuk proses ini disebut linter. Integrasi linter dengan editor kode Anda akan membuat efisien dalam menulis kode Python. Pertimbangan ini karena keluaran atau output dari aplikasi linter hanya berupa teks singkat berupa keterangan dan kode Error atau Warning atau Kesalahan Konvensi Penamaan (Naming Conventions).

Dengan lint atau linting akan meminimalkan kode Anda mengalami error, salah satunya karena kesalahan indentasi di Python. Sebelum kode Anda diproses oleh interpreter Python dengan IndentationError, lint akan memberitahukannya lebih dahulu ke Anda. Berikut adalah tiga jenis aplikasi linter.

  1. Pycodestyle (sebelumnya bernama pep8)
    Pycodestyle adalah aplikasi open source (berlisensi MIT/Expat) untuk membantu mengecek kode terkait gaya penulisan kode dengan konvensi PEP8.
  1. Pylint
    Pylint adalah aplikasi open source (berlisensi GPL v2) untuk melakukan analisis kode Python, mengecek untuk kesalahan (error) pemrograman, memaksakan standar penulisan kode dengan mengecek penulisan kode yang tidak baik, serta memberikan saran untuk refactoring sederhana.
  1. Flake8
    Flake8 adalah aplikasi open source (berlisensi MIT) yang membungkus sejumlah kemampuan aplikasi lain, seperti pycodestyle, pyflakes, dan sejumlah (skrip/fitur) lainnya.


Memformat Kode

Jika proses lint atau linting hanya melakukan pengecekan, kali ini adalah arahan gaya penulisan kode agar bisa sesuai dengan PEP8. Kita akan kembali menggunakan beberapa aplikasi yang nantinya akan diinstal. 

Proses memformat kode akan sama dengan cara melakukan proses linting, yaitu kita akan mengeksekusi script. Perbedaannya adalah output yang dihasilkan. Jika proses linting menghasilkan pesan dengan menunjukkan baris dan kode yang mengalami kesalahan, proses memformat kode akan memberikan pesan berupa kode yang telah diperbaiki. Ini artinya Anda tidak perlu mengubah kode secara manual. Berikut adalah tiga jenis aplikasi untuk memformat kode.

  1. black
    black adalah proyek open source yang dikembangkan di repository Python Software Foundation (PSF) dengan lisensi MIT. Untuk mendapatkan gambaran, versi online (tidak resmi) ada di https://black.now.sh.
  1. YAPF (Yet Another Python Formatter)
    YAPF adalah proyek open source yang dikembangkan di repository Google dengan lisensi Apache.
  1. autopep8
    autopep8 adalah proyek open source (berlisensi MIT) yang termasuk paling awal untuk memformat kode dengan bantuan lint pycodestyle. 


Style Guide Statement Gabungan

Setelah mengetahui aplikasi untuk pengecekan dan memformat kode, kali ini kita akan belajar cara membuat kode yang baik dan benar.


Statement Gabungan

Saat Anda membuat program dengan banyak statement, usahakan untuk tidak menggabungkan >1 statement pada baris yang sama.

Disarankan seperti ini.

  1. if foo == 'blah':
  2.     do_blah_thing()
  3. do_one()
  4. do_two()
  5. do_three()

Tidak disarankan seperti ini.

  1. if foo == 'blah': do_blah_thing()
  2. do_one(); do_two(); do_three()

Anda diperbolehkan untuk membuat sebuah konten/isi dari if/for/while yang cukup pendek untuk diletakkan dalam satu baris (program tetap berjalan). Namun, pastikan tidak melakukannya jika if/for/while Anda bertingkat atau bersifat multi clause, misalnya if-else, try-finally, dan sebagainya.

Tidak disarankan seperti ini.

  1. if foo == 'blah': do_blah_thing()
  2. for x in lst: total += x
  3. while t < 10: t = delay()

Sangat tidak disarankan seperti ini.

  1. if foo == 'blah': do_blah_thing()
  2. else: do_non_blah_thing()
  3. try: something()
  4. finally: cleanup()
  5. do_one(); do_two(); do_three(long, argument,
  6.                              list, like, this)
  7. if foo == 'blah': one(); two(); three()


Penggunaan Trailing Commas

Koma di bagian akhir (trailing commas) umumnya bersifat opsional, satu statement ketika ia bersifat wajib adalah saat kita membuat variabel menggunakan tipe tuple dengan satu elemen. Hal ini umumnya diperjelas dengan kurung untuk menghindari penghapusan atau pembersihan.

Disarankan seperti ini.

  1. FILES = ('setup.cfg',)

Tidak disarankan seperti ini.

  1. FILES = 'setup.cfg',

Tidak umum jika Anda meletakkan trailing comma pada baris tempat Anda menutup kurung/kurawal/siku seperti di bawah ini, kecuali dalam tuple dengan satu elemen seperti yang dijelaskan di atas.

Disarankan seperti ini.

  1. FILES = [
  2.     'setup.cfg',
  3.     'tox.ini',
  4.     ]
  5. initialize(FILES,
  6.            error=True,
  7.            )

Tidak disarankan seperti ini.

  1. FILES = ['setup.cfg', 'tox.ini',]
  2. initialize(FILES, error=True,)


Anotasi Fungsi

Anotasi fungsi adalah fitur yang memungkinkan kita untuk menambahkan informasi tambahan tentang parameter dan return value dari sebuah fungsi. Jika sebelumnya kita belajar menambahkan informasi terkait fungsi dengan menambahkan docstring, anotasi fungsi lebih spesifik untuk menjelaskan parameter dan return value.

Penggunaan anotasi fungsi sebaiknya menggunakan aturan baku untuk titik dua (:) dan menggunakan spasi untuk penggunaan arah panah atau arrow (->). Hal ini disebut sebagai type hints yang merujuk pada PEP 484.

  1. Yes:
  2. def munge(input: str):  # Menambahkan informasi parameter bertipe string
  3.     pass
  4. def munge() -> str:   # Menambahkan informasi return value bertipe string
  5.     pass
  6.  
  7. No:
  8. def munge(input:str):  # Menambahkan informasi parameter bertipe string
  9.     pass
  10. def munge()->str:   # Menambahkan informasi return value bertipe string
  11.     pass

Jika kita membuat fungsi yang menggabungkan anotasi dengan nilai parameter, sebaiknya tetap menggunakan spasi sebelum dan sesudah tanda sama dengan (=). Namun, ketika membuat fungsi biasa tanpa adanya anotasi, sebaiknya tidak menggunakan spasi sebelum dan sesudah tanda sama dengan (=).

  1. Yes:
  2. def LuasPersegiPanjang(panjang:int = 2, lebar=None):
  3.     pass
  4.  
  5. No:
  6. def LuasPersegiPanjang(panjang: int=2, lebar = None):
  7.     pass


Style Guide Prinsip Penamaan pada Python

Penamaan pada Python mencakup banyak hal, seperti penamaan fungsi, kelas, dan sebagainya. Berikut adalah beberapa rekomendasi untuk penamaan yang meliputi overriding, penamaan deskriptif, fungsi, method, dan sebagainya. Namun, Anda juga dapat memilih mempertahankan styling yang sudah digunakan sebelumnya untuk menjaga konsistensi internal tim atau perusahaan. Ini karena konsistensi internal lebih diutamakan.

Prinsip Overriding

Nama yang dilihat oleh user publik sebaiknya merefleksikan penggunaan/fungsinya dan bukan implementasinya.

Penamaan Deskriptif

Penamaan deskriptif adalah cara untuk memberikan nama yang informatif, jelas, dan sesuai dengan tujuan dari elemen kode. Penamaan deskriptif ini meliputi variabel, fungsi, kelas, hingga konstanta.

Ada berbagai cara penamaan yang umum digunakan dalam Python. Pemilihan cara penamaan ini penting untuk menjaga konsistensi dan kejelasan kode. Penamaan ini juga merujuk pada PEP8 mengenai Naming Conventions dan Naming Styles.

Berikut adalah beberapa cara penamaan yang umum:

  1. Satu karakter huruf kecil: b
  2. Satu karakter huruf besar: B
  3. Huruf kecil: hurufkecil
  4. Huruf kecil dengan pemisah kata garis bawah: huruf_kecil_dengan_pemisah_kata_garis_bawah
  5. HURUF BESAR: HURUFBESAR
  6. HURUF BESAR dengan pemisah garis bawah: HURUF_BESAR_DENGAN_PEMISAH_GARIS_BAWAH
  7. Huruf Besar di Awal Kata (CapWords, CamelCase): HurufBesarDiAwalKata (pastikan semua singkatan/akronim dituliskan dengan huruf besar, misalnya HTTPServerError, bukan HttpServerError)
  8. Huruf Campuran: hurufCampuran (mirip dengan CapWords, hanya berbeda di karakter paling awal)
  9. Huruf Besar di Awal Kata dengan Garis Bawah: Huruf_Besar_Di_Awal_Kata_Dengan_Garis_Bawah

Python tidak menyarankan atau lebih tepatnya tidak dibutuhkan jika Anda membuat sebuah fungsi yang diawali huruf atau frasa, seperti 'f' jika fungsinya 'f_mean()',  'r' jika fungsinya 'r_name()', dan sebagainya.

Selain penggunaan huruf atau frasa yang tidak direkomendasikan, berikut adalah beberapa bentuk penamaan khusus yang umum ditemukan dalam penamaan fungsi. Ini juga bisa Anda terapkan pada penamaan variabel dan kelas.

  1. _diawali_sebuah_garis_bawah: penamaan ini dapat digunakan untuk penggunaan internal lemah yang merujuk pada penggunaannya dengan lingkup tertentu.
  2. diakhiri_sebuah_garis bawah_: penamaan ini digunakan untuk mengatasi redundan dengan keyword/reserved words di Python.
  3. __diawali_dua_garis bawah: menegaskan bahwa sebuah objek adalah bagian dari kelas tertentu.
  4. __diawali_dan_diakhiri_dua_garis bawah__: Objek atau atribut tertentu yang diciptakan Python untuk digunakan dalam program. Contohnya adalah  __init__, __import__ or __file__. 


Hal-Hal yang Harus Diperhatikan dalam Penamaan

Berikut adalah hal-hal yang harus diperhatikan dalam penamaan fungsi, method, hingga penamaan kelas. 

  1. Nama yang Dihindari
    Hindari karakter l (huruf L kecil), O (huruf o besar) atau I (huruf i besar) sebagai nama variabel satu karakter karena mereka sulit dibedakan dengan angka satu dan nol. 
  1. ASCII Compatibility
    Merujuk pada PEP 3131, suatu identifiers yang digunakan dalam Python Standard Library harus kompatibel dengan kode ASCII.
  1. Nama Paket dan Nama Modul
    Penamaan modul sebaiknya pendek atau singkat, menggunakan huruf kecil, dan opsional garis bawah (_) untuk meningkatkan keterbacaan. Nama paket juga sebaiknya singkat, menggunakan huruf kecil, dan hindari garis bawah(_).
  1. Nama Kelas
    Saat menamai kelas, gunakan CamelCase atau CapWords. Pastikan semua akronim (misal HTTP) ditulis keseluruhan dengan huruf besar.
  1. Penulisan Tipe Variabel
    Untuk penamaan variabel, umumnya menggunakan CamelCase atau CapWords.
  1. Nama Exception
    Untuk pengecualian (exception), Anda juga menerapkan konvensi penamaan kelas pada exception karena ia seharusnya bertipe kelas. Bedanya, tambahkan "Error" atau nama deskriptif lain pada nama exception Anda.
  1. Nama Variabel Global
    Dalam variabel global, penamaannya bisa mengikuti fungsi/modul yang bersifat publik. Anda bisa menggunakan garis bawah untuk menghindari variabel tersebut diimpor jika ia termasuk modul non-publik.
  1. Nama Fungsi, Parameter, dan Variabel
    Nama fungsi, parameter, dan variabel sebaiknya menggunakan huruf kecil dengan pemisahan menggunakan garis bawah untuk meningkatkan keterbacaan. mixedCase dapat digunakan jika ada dependensi dengan pustaka menggunakan style tertentu.
  1. Argumen Fungsi dan Method
    Dalam pembuatan fungsi dan method pada suatu kelas, ada beberapa hal yang perlu dipertimbangkan..
    1. Gunakan self sebagai argumen pertama jika Anda membuat instance method.
    2. Gunakan cls sebagai argumen pertama ketika Anda membuat class method.
  1. Nama Method dan Variabel Instance
    Saat membuat method dan variabel dalam suatu kelas, gunakan standar penamaan fungsi, yaitu gunakan huruf kecil dengan pemisah kata garis bawah untuk meningkatkan keterbacaan. Tambahkan garis bawah sebagai awalan untuk method non-publik dan variabel internal pada fungsi.
  1. Konstanta
    Dalam memberikan nama variabel bertipe konstanta, umumnya didefinisikan pada bagian atas modul dengan huruf besar, misalnya 'PI = 3,14'  atau  'TOTAL = 4.14213'.
  1. Selalu Persiapkan untuk Inheritance
    Saat membangun metode dan variabel dalam sebuah kelas, sebaiknya Anda dapat langsung mengetahui atribut pada metode dan variabel tersebut, publik atau non-publik. Jika Anda ragu, jadikan atributnya non-publik. Sebab, lebih mudah menjadikan sebuah variabel/method bersifat non-publik menjadi publik, dibandingkan sebaliknya.

    Variabel atau method yang bersifat non-publik adalah suatu variabel atau method yang hanya digunakan untuk lingkup tertentu dan tidak diakses secara langsung di luar.

    Method/Variabel publik dipersiapkan untuk pihak eksternal menggunakan kelas Anda. Anda juga otomatis berkomitmen untuk menghindari adanya incompatible backward changes atau suatu kode yang tidak dapat berjalan kembali setelah adanya perubahan.

    Sebaliknya, method/variabel dengan atribut non-publik hanya digunakan oleh Anda sebagai developer. Itu juga tidak memberikan garansi kepada siapa pun bahwa Anda takkan mengubah atau menghapusnya. Di sini kita tidak menggunakan atribut private karena dalam Python tidak ada atribut yang benar-benar private.

    Saat mendeklarasikan variabel/method tersebut, ikuti panduan Pythonic berikut.
    1. Atribut publik tidak menggunakan awalan garis bawah.
    2. Jika nama sebuah method/variabel publik sama dengan reserved keyword, tambahkan akhiran garis bawah. Hindari menyingkat atau mengurangi huruf.
    3. Pada data publik bersifat simpel, hindari nama yang terlalu panjang. Cukup dengan nama atribut sependek mungkin. Ingatlah bahwa pada masa depan Anda akan mungkin mengembangkan skema atau data ini sehingga nama sependek apa pun mungkin akan menguntungkan Anda.
    4. Jika Anda berniat untuk mewariskan atau membuat subclass dari kelas dan menginginkan sebuah variabel hanya digunakan di kelas utama saja, tambahkan awalan dua garis bawah. Ini akan memudahkan Anda karena Python mengenalinya sebagai konvensi kelas, untuk menghindari kemungkinan kesamaan nama atau implementasi.

Bersambung ke:

Comments

Popular posts from this blog

Ceritakan cerita saya:

Aplikasi/Gaming/Koding: NKHM Nusantara:

STUDIUM GENERALE