PEP8: Amalan Penulisan dalam Python

PEP8: A Writing Practice in Python

Pengenalan

Menulis adalah sebuah seni. Menulis esei, pantun, sajak, puisi, gurindam dan sebagainya adalah sebuah seni yang indah. Seni tidak terbatas dalam ruang lingkup atau peraturan yang ketat tetapi, ada di antaranya yang mempunyai aturan dan disiplin tersendiri.

Pantun harus mempunyai rima, sajak dan puisi lebih bebas penulisannya, dan pelbagai lagi peraturan dalam mencipta seni penulisan.

Seperti juga Python, bahasa pengaturcaraan ini juga mempunyai amalan ataupun praktis yang terbaik dalam menulis kod.

Salah seorang jurutera perisian yang juga merangkap perintis Python, Tim Peters telah menulis 20 prinsip Python berbentuk pujangga. Ia telah dikenali sebagai Zen of Python (nama formalnya ialah PEP20).

Zen of Python

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you're Dutch.

Now is better than never.

Although never is often better than right now.

If the implementation is hard to explain, it's a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!

Daripada Zen of Python ini barulah muncul PEP8, sebuah dokumentasi Python yang menerangkan panduan gaya penulisan Python yang disarankan oleh penemu bahasa pengaturcaraan ini, Guido Von Rossum.

Guido Von Rossum

Guido berkata,

Dalam kebanyakan masa, kita lebih banyak membaca kod daripada menulis kod.

Justeru itu, kod seharusnya mempunyai ciri kebolehbacaan. Selaras dengan salah satu Zen dalam Zen of Python ;-

Readability counts.

Jadi, bagaimana kita boleh menulis kod Python dengan gaya penulisan yang menepati ciri kebolehbacaan sekaligus menulis kod dengan lebih baik?

Berikut saya sertakan 5 amalan yang disarankan kepada pengaturcara Python untuk dipraktik daripada dokumen PEP8.

(nota: Penulis mengandaikan pembaca sudah mempunyai sedikit asas Python sebelum membaca artikel ini.)

1. Menggunakan perenggan untuk membezakan sesuatu.

Perenggan adalah antara identiti utama Python. Perenggan digunakan dalam penyata bersyarat, fungsi,class dan lingkaran.

Oleh sebab itu, PEP8 telah menyelaraskan beberapa cara yang terbaik bagi menggunakan perenggan. Misalnya, jika kita menulis sebuah fungsi yang mempunyai beberapa argumen di dalamnya, cara yang baik ✅ adalah seperti berikut;

my_func = nama_fungsi_panjang(arg_1, arg_2, 
                              arg_3, arg_4)

Ini adalah cara menggunakan perenggan supaya kod kelihatan kemas dan mudah untuk dibezakan antara fungsi dan argumen. Cara penulisan yang kurang baik ❌adalah seperti berikut;

my_func = nama_fungsi_panjang(arg_1, arg_2, 
          arg_3, arg_4)

Ini juga boleh digunakan untuk menulis list atau dictionary seperti contoh berikut;

my_list = [
           1, 2, 3, 
           4, 5, 6, 
           7, 8, 9
    ]

my_dictionary = { 
                  1: "Isnin", 
                  2: "Selasa",
                  3: "Rabu
        }

Elemen di dalam list dapat dilihat dengan jelas dan tersusun.

Menulis dengan menggunakan perenggan dengan betul dapat memudahkan pembaca (pengaturcara) untuk membaca kod, lebih-lebih lagi jika kita ingin membaca kod yang ditulis oleh orang lain dan sebaliknya.

2. Maksimum character untuk satu barisan.

Bagi mengelakkan kod ditulis terlalu panjang, PEP8 telah menghadkan supaya maksimum karakter yang ditulis untuk satu barisan iaitu 79 karakter.

Anda tak perlulah mengira satu persatu huruf pada kod, tetapi anda boleh agak-agak panjang kod anda dalam sebaris itu supaya tidak terlalu panjang dan meleweh-leweh. Jika kod anda mempunya koma, sambung ke barisan yang seterusnya.

Selain daripada memudahkan tujuan pembacaan, ini juga membantu pengaturcara yang ingin membuka dua buah skrip kod sekaligus bersebelahan membaca kod kedua-dua skrip.

3. Menggunkan satu jenis pembuka kata.

Jika anda perhatikan di papan kekunci, terdapat dua jenis pembuka kata iaitu pembuka kata jenis tunggal ' ' dan jenis ganda " ".

PEP8 menyarankan pengaturcara untuk membiasakan diri dengan menggunakan salah satu sahaja antara dua jenis pembuka kata ini, bagi menjamin konsistensi penulisan kod

Konsistensi akan menjadikan kod lebih kemas dan tidak bercampur baur.

4. Pemilihan dan gaya penulisan nama.

Pilih nama yang mempunyai kaitan dengan isi kandungan fungsi, pemboleh ubah atau class tersebut. Ini bagi memudahkan anda untuk merujuk semula kod tersebut sama ada untuk menyerunya ke dalam fungsi atau mengoutputkannya.

Contoh yang baik ✅

senarai_nom = [1,2,3,4,5,6]

def filter_func(num):
      for val in num:
          if val < 3:
                print("Nilai lebih rendah daripada 3.")
          else:
                print("Nilai lebih tinggi daripada 3.")

Contoh yang kurang baik ❌

a = [1,2,3,4,5,6]

def my_func(x):
      for i in x:
          if i < 3:
                print("Nilai lebih rendah daripada 3.")
          else:
                print("Nilai lebih tinggi daripada 3.")

Kedua-dua kod di atas mempunyai tujuan yang sama, tetapi pemilihan nama yang berbeza. Kod yang pertama lebih jelas dan mudah dibaca kerana pemilihan nama yang mempunyai kaitan, manakala kod kedua hanya menggunakan huruf sahaja yang jelas tidak menerangkan konteks kod.

Gaya penulisan nama juga mempunyai cara yang tersendiri. Jika ingin menulis fungsi atau pemboleh ubah, nama fungsi seharusnya berhuruf kecil, dengan nama yang disambung menggunakan underscore bagi meningkatkan kebolehbacaan.

Contoh yang baik ✅

# dengan underscore
senarai_nom_ganjil = [1,3,5]
def fungsi_nombor(senarai):
        print(senarai)

fungsi_nombor(senarai_nombor_ganjil)

Contoh kurang baik ❌

# tanpa underscore
senarainomganjil = [1,3,5]
def fungsinombor(senarai):
        print(senarai)

fungsinombor(senarainomborganjil)

Anda boleh menilai sendiri penggunaan nama yang mana satu yang sedap mata memandang dan mudah dibaca.

Antara cadangan gaya penulisan lain adalah;

  • nama pemboleh ubah malar -> SEMUA HURUF BESAR

Contoh:

PI_VALUE = 3.14159
BETA_VALUE = 12
  • nama class -> Huruf Besar Di Awal Setiap Nama

Contoh:

class MyDog:
       def __init__(self, name, age):
              self.name = name
              self.age = age

5. Cara menulis komen.

Seperti yang telah dibincangkan dalam artikel sebelum ini, terdapat 2 cara untuk kita menulis komen di dalam kod, iaitu

  1. Menggunakan tanda pagar, #
  2. 3 pembuka dan penutup kata (atau dikenali sebagai docstring jika tidak disabitkan pada mana-mana fungsi)

Menulis komen juga terdapat 2 cara penulisan iaitu,

  • Secara blok
  • Secara didalam satu barisan yang sama.

Cara blok adalah seperti berikut;

#semak sama ada harga melebih atau tidak
harga_ikan = 10
if harga_ikan > 10:
       print("Harga terlalu mahal")

Cara menulis dalam satu barisan;

harga_ikan = 10           #semak sama ada harga melebih atau tidak
if harga_ikan > 10:
       print("Harga terlalu mahal")

Disarankan untuk diperenggankan dengan beberapa tab sebelum menulis komen bagi cara menulis komen atas barisan yang sama.

Bagi menggunakan 3 pembuka dan penutup kata bagi tujuan komen atau docstring pula, jika komen tersebut hanya mempunyai satu barisan, maka pembuka dan penutup kata adalah di atas barisan yang sama dengan karakter.

Contoh;

'''Ini adalah nota kecil tentang kod berikut.'''

Tetapi, jika komen terdiri daripada beberapa barisan, hanya pembuka sahaja di atas barisan yang sama pada barisan pertama, tetapi penutup kata harus berada satu barisan dibawah barisan terakhir.

Contoh;

'''Fungsi ini berkenaan sebuah operasi matematik.

Fungsi ini masih belum lengkap.
'''

Kesimpulan

Begitulah sedikit sebanyak rumusan daripada PEP8 yang harus anda tahu.

Mulakan menulis kod dengan disiplin yang betul adalah sebuah tabiat yang baik daripada mebiasakan diri dengan penulisan yang kurang baik.

Namun, jika anda sudah berpengalaman dalam Python dan terdapat beberapa cara penulisan anda yang bercanggah dengan PEP8, maka masih punya masa untuk memperbetulkannya dan menulis kod Python dengan lebih kemas dan menarik.

Anda boleh baca dengan lebih lanjut lagi pada pautan yang saya telah sertakan dibawah pada bahagian sumber.

Sampai disini sahaja artikel kali ini. Saya berharap artikel ini bermanfaat untuk para pembaca sekalian. Sampai jumpa lagi, salam! 👋

Sumber:

  1. PEP20: peps.python.org/pep-0020
  2. PEP8: peps.python.org/pep-0008
  3. PEP257: peps.python.org/pep-0257