{ "cells": [ { "cell_type": "markdown", "id": "237b67bf-d8b4-42e6-bc02-984327b6525e", "metadata": {}, "source": [ "# Kondisi, Looping, Debugging, Refactoring, dan Clean Code\n", "Dalam dunia pemrograman, pemahaman tentang kondisi (conditional) dan pengulangan (looping) menjadi dasar dalam memecahkan masalah. Namun, perjalanan ini tidak hanya sebatas penulisan kode. Teknik debugging membantu mengidentifikasi dan memperbaiki kesalahan, sementara refactoring memperbaiki kode untuk efisiensi. Prinsip-prinsip clean code membimbing kita dalam menulis kode yang mudah dibaca dan dikelola. Dalam modul ini, kami akan menggabungkan semua ini dalam praktik dan latihan, menjembatani konsep pemrograman dengan manipulasi tipe data kompleks." ] }, { "cell_type": "markdown", "id": "8c5f99b3-7b9f-459c-b58b-fe44eb61567f", "metadata": {}, "source": [ "## 1. Kombinasi Conditional dan Looping Kasus Pemrograman\n", "Dalam modul ini, kita akan menjelajahi bagaimana menggabungkan pernyataan kondisi (conditional) dengan pernyataan pengulangan (looping) dalam kasus-kasus pemrograman yang beragam. Kita akan memahami bagaimana kondisi memengaruhi alur program dan bagaimana pengulangan dapat digunakan untuk menjalankan tugas berulang. Melalui berbagai contoh kasus, kita akan belajar menggabungkan keduanya untuk menciptakan solusi yang efektif dan efisien." ] }, { "cell_type": "code", "execution_count": 1, "id": "c34564dd-16d0-4cd0-8f53-b7ade903db9d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Bilangan prima hingga 20:\n", "2 3 5 7 11 13 17 19 " ] } ], "source": [ "# Contoh 1: Menampilkan Bilangan Prima\n", "def is_prime(num):\n", " if num <= 1:\n", " return False\n", " for i in range(2, num):\n", " if num % i == 0:\n", " return False\n", " return True\n", "\n", "max_num = 20\n", "print(f\"Bilangan prima hingga {max_num}:\")\n", "for num in range(2, max_num + 1):\n", " if is_prime(num):\n", " print(num, end=\" \")" ] }, { "cell_type": "code", "execution_count": null, "id": "8c4d5486-3d90-4e49-92af-17239b920b43", "metadata": {}, "outputs": [], "source": [ "# Contoh 2: Kalkulator Sederhana\n", "while True:\n", " print(\"Pilih operasi:\")\n", " print(\"1. Penjumlahan\")\n", " print(\"2. Pengurangan\")\n", " print(\"3. Perkalian\")\n", " print(\"4. Pembagian\")\n", " choice = input(\"Masukkan pilihan (1/2/3/4): \")\n", "\n", " if choice in ('1', '2', '3', '4'):\n", " num1 = float(input(\"Masukkan angka pertama: \"))\n", " num2 = float(input(\"Masukkan angka kedua: \"))\n", "\n", " if choice == '1':\n", " print(num1 + num2)\n", " elif choice == '2':\n", " print(num1 - num2)\n", " elif choice == '3':\n", " print(num1 * num2)\n", " elif choice == '4':\n", " print(num1 / num2)\n", " else:\n", " print(\"Pilihan tidak valid\")\n", "\n", " again = input(\"Apakah ingin menghitung lagi? (ya/tidak): \")\n", " if again.lower() != 'ya':\n", " break" ] }, { "cell_type": "code", "execution_count": null, "id": "82241d52-8976-4105-9bee-210e9ff2e87b", "metadata": {}, "outputs": [], "source": [ "# Contoh 3: Faktorisasi Bilangan\n", "\n", "def prime_factors(num):\n", " factors = []\n", " divisor = 2\n", " while num > 1:\n", " if num % divisor == 0:\n", " factors.append(divisor)\n", " num //= divisor\n", " else:\n", " divisor += 1\n", " return factors\n", "\n", "number = int(input(\"Masukkan bilangan: \"))\n", "print(f\"Faktorisasi prima dari {number}: {prime_factors(number)}\")\n" ] }, { "cell_type": "markdown", "id": "63a3539e-949d-4efc-9193-30b019296a02", "metadata": {}, "source": [ "## 2. Teknik Debugging\n", "Dalam modul ini, kita akan menjelajahi dunia debugging, keterampilan penting dalam pengembangan perangkat lunak. Debugging membantu mengidentifikasi dan memperbaiki kesalahan dalam kode, sehingga program berjalan sesuai yang diharapkan. Kita akan belajar tentang berbagai teknik debugging, seperti pencatatan (logging), menggunakan debugger, serta strategi pencarian dan pemecahan masalah. Dengan penekanan pada pemahaman dan praktik, kita akan meningkatkan kemampuan dalam mengatasi tantangan yang muncul saat mengembangkan aplikasi." ] }, { "cell_type": "code", "execution_count": null, "id": "f9ed66cf-7ede-4155-a657-fa536224f5f2", "metadata": {}, "outputs": [], "source": [ "# Contoh 1: Pencatatan (Logging)\n", "import logging\n", "\n", "logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')\n", "logging.debug(\"Pesan ini akan tampil ketika level logging adalah DEBUG\")\n", "logging.info(\"Ini pesan info\")\n", "logging.warning(\"Ini pesan peringatan\")\n", "logging.error(\"Ini pesan error\")\n", "logging.critical(\"Ini pesan kritis\")" ] }, { "cell_type": "code", "execution_count": null, "id": "04305aae-9f80-469d-94a2-b1fadd68a37c", "metadata": {}, "outputs": [], "source": [ "# Contoh 2: Menggunakan Debugger (pdb)\n", "\n", "import pdb\n", "def calculate_total(a, b):\n", " result = a + b\n", " pdb.set_trace() # Program akan berhenti di sini, Anda bisa mengakses nilai variabel\n", " result *= 2\n", " return result\n", "\n", "num1 = 10\n", "num2 = 5\n", "total = calculate_total(num1, num2)\n", "print(f\"Total: {total}\")\n" ] }, { "cell_type": "code", "execution_count": null, "id": "6383a446-baba-4838-a184-9ab7d6ae3414", "metadata": {}, "outputs": [], "source": [ "# Contoh 3: Menyimak Kesalahan Eksekusi\n", "try:\n", " num = int(input(\"Masukkan angka: \"))\n", " hasil = 10 / num\n", " print(\"Hasil pembagian:\", hasil)\n", "except ValueError:\n", " print(\"Anda harus memasukkan angka\")\n", "except ZeroDivisionError:\n", " print(\"Tidak bisa membagi dengan nol\")\n", "except Exception as e:\n", " print(\"Terjadi kesalahan:\", e)\n" ] }, { "cell_type": "markdown", "id": "7d7caef8-0f41-416e-a252-2fbca5272b76", "metadata": {}, "source": [ "## 3. Teknik Refactoring \n", "Refactoring adalah praktik mengubah struktur dan desain kode tanpa mengubah perilaku eksternal. Tujuannya adalah untuk meningkatkan kualitas kode, membuatnya lebih mudah dibaca, dikelola, dan dipahami. Proses ini dilakukan tanpa mengubah fungsionalitas yang ada." ] }, { "cell_type": "code", "execution_count": null, "id": "08693ce5-0fd5-430e-8cb6-b02908302307", "metadata": {}, "outputs": [], "source": [ "# Contoh 1: Memisahkan Fungsi yang Panjang\n", "\n", "def hitung_total(items):\n", " total = 0\n", " for item in items:\n", " total += item['harga']\n", " print(f\"{item['nama']}: {item['harga']}\")\n", " print(f\"Total: {total}\")\n", "\n", "\n", "# Setelah Refactoring\n", "def hitung_total(items):\n", " total = 0\n", " for item in items:\n", " total += item['harga']\n", " return total\n", "\n", "def tampilkan_invoice(items):\n", " for item in items:\n", " print(f\"{item['nama']}: {item['harga']}\")\n", " print(f\"Total: {hitung_total(items)}\")\n" ] }, { "cell_type": "code", "execution_count": null, "id": "620896f2-6b76-49f7-8626-81b73fc9fa49", "metadata": {}, "outputs": [], "source": [ "# Contoh 2: Menggunakan Nama Variabel yang Deskriptif\n", "\n", "def calc(a, b):\n", " res = a * b\n", " return res\n", "\n", "def hitung_perkalian(angka1, angka2):\n", " hasil_perkalian = angka1 * angka2\n", " return hasil_perkalian\n" ] }, { "cell_type": "code", "execution_count": null, "id": "c44d184b-6b75-48bd-91af-19308ea431ce", "metadata": {}, "outputs": [], "source": [ "# Contoh 3: Menggabungkan Kode Duplikat\n", "def hitung_luas_persegi(sisi):\n", " return sisi * sisi\n", "\n", "def hitung_luas_persegi_panjang(panjang, lebar):\n", " return panjang * lebar\n", "\n", "def hitung_luas_segitiga(alas, tinggi):\n", " return 0.5 * alas * tinggi\n", "\n", "def hitung_luas_bangun_datar(panjang, lebar=None):\n", " if lebar is None:\n", " return panjang * panjang\n", " else:\n", " return panjang * lebar * 0.5" ] }, { "cell_type": "markdown", "id": "fcd185cb-ab3b-4da5-9842-2ea5a969fb30", "metadata": {}, "source": [ "## 4. Clean Code\n", "Clean Code adalah pendekatan dalam penulisan kode yang berfokus pada membuat kode yang mudah dipahami, konsisten, dan minim ambiguitas. Prinsip-prinsip Clean Code membantu dalam menghasilkan kode yang lebih mudah untuk dikelola, dikembangkan, dan dimaintain." ] }, { "cell_type": "code", "execution_count": 2, "id": "a6af6b65-7967-4337-ba92-a57aeec563a3", "metadata": {}, "outputs": [], "source": [ "# Contoh 1: Penggunaan Nama Variabel yang Deskriptif\n", "\n", "x = 5 # Apa yang dimaksud dengan x?\n", "\n", "def f(a):\n", " b = a * 2 # Apa yang dimaksud dengan b?\n", "\n", "\n", "# Clean Code\n", "\n", "jumlah_pengguna = 5\n", "\n", "def hitung_kali_dua(angka):\n", " hasil_perkalian = angka * 2\n" ] }, { "cell_type": "code", "execution_count": null, "id": "ac1335c8-eea1-4bb0-baf3-d2598c9c5cc4", "metadata": {}, "outputs": [], "source": [ "# Contoh 2: Menghindari Komentar yang Redundan\n", "\n", "# Fungsi untuk menghitung total belanja\n", "def hitung_total(belanjaan):\n", " total = 0\n", " for item in belanjaan:\n", " total += item['harga']\n", " return total\n", "\n", "# Clean Code\n", "\n", "def hitung_total(belanjaan):\n", " total = 0\n", " for item in belanjaan:\n", " total += item['harga']\n", " return total\n" ] }, { "cell_type": "code", "execution_count": null, "id": "df1417e9-1da3-4d81-9f91-3639f23f21c5", "metadata": {}, "outputs": [], "source": [ "# Contoh 3: Memisahkan Fungsi dengan Jelas\n", "\n", "def proses_data(data):\n", " # Melakukan beberapa operasi\n", " hasil_operasi = perform_operation(data)\n", " # Memproses hasil operasi\n", " process_result(hasil_operasi)\n", " return hasil_operasi\n", "\n", "# Clean Code\n", "\n", "def proses_data(data):\n", " hasil_operasi = perform_operation(data)\n", " process_result(hasil_operasi)\n", " return hasil_operasi\n" ] }, { "cell_type": "markdown", "id": "d12a97fb-a7fc-42fa-9c64-86345a7aa273", "metadata": {}, "source": [ "Clean Code berfokus pada memberikan kode yang jelas, dengan penggunaan nama variabel yang deskriptif, menghindari komentar yang tidak perlu, dan memisahkan fungsi dengan jelas untuk memastikan kode mudah dibaca dan dimengerti oleh siapa pun yang membacanya." ] }, { "cell_type": "markdown", "id": "a2abbd97-0f69-49b2-9ab0-e5def1ba6004", "metadata": {}, "source": [ "## 5. Kode Error Python\n", "Kode error dalam bahasa pemrograman Python adalah pesan atau pemberitahuan yang muncul saat interpreter Python menemukan situasi yang tidak valid atau tidak bisa diinterpretasikan. Pesan error ini memberikan informasi tentang jenis kesalahan yang terjadi dan lokasi di mana kesalahan itu ditemukan dalam kode. Contoh beberapa jenis kode error umum dalam Python meliputi:\n", "1. Syntax Error: Kesalahan ini terjadi ketika Anda melanggar aturan tata bahasa Python. Misalnya, lupa menambahkan tanda titik dua di akhir kondisi if.\n", "2. Indentation Error: Indentasi yang tidak konsisten atau salah dapat menyebabkan kesalahan ini. Python sangat sensitif terhadap indentasi yang benar.\n", "3. Name Error: Terjadi saat Anda menggunakan variabel atau nama yang belum didefinisikan sebelumnya.\n", "4. Type Error: Kesalahan ini muncul ketika Anda mencoba melakukan operasi pada tipe data yang tidak mendukung operasi tersebut.\n", "5. Value Error: Terjadi ketika fungsi menerima argumen dengan tipe yang benar, tetapi nilai yang tidak valid.\n", "6. Index Error: Kesalahan ini muncul ketika Anda mencoba mengakses elemen dalam tipe data seperti list atau string menggunakan indeks yang tidak valid.\n", "7. File Not Found Error: Terjadi ketika Anda mencoba membuka atau memanipulasi file yang tidak ditemukan.\n", "8. ZeroDivisionError: Kesalahan ini muncul ketika Anda mencoba membagi angka dengan nol." ] }, { "cell_type": "code", "execution_count": null, "id": "2e064752-91fa-4d3d-a00f-fd86c2d56bb1", "metadata": { "jp-MarkdownHeadingCollapsed": true }, "outputs": [], "source": [ "#### Syntax Error\n", "if x = 5:\n", " print(\"Nilai x adalah 5\")\n", "\n", "#### Indentation Error\n", "def print_numbers():\n", " print(1)\n", " print(2) # Indentasi tidak konsisten\n", " print(3)\n", "\n", "#### Name Error\n", "print(angka) # Variabel 'angka' belum didefinisikan sebelumnya\n", "\n", "#### Type Error\n", "total = \"10\" + 5 # Tidak bisa menggabungkan string dengan integer\n", "\n", "#### Value Error\n", "number = int(\"abc\") # Tidak dapat mengubah \"abc\" menjadi integer\n", "\n", "#### Index Error\n", "my_list = [1, 2, 3]\n", "print(my_list[3]) # Indeks 3 melebihi panjang list (indeks valid 0-2)\n", "\n", "#### File Not Found Error\n", "with open(\"file_tidak_ada.txt\", \"r\") as file:\n", " content = file.read() # File \"file_tidak_ada.txt\" tidak ditemukan\n", "\n", "#### ZeroDivisionError\n", "result = 10 / 0 # Tidak dapat membagi angka dengan nol\n" ] }, { "cell_type": "markdown", "id": "944a24a7-f320-48f3-a21a-4bdd7d7fc273", "metadata": {}, "source": [ "## Praktik dan latihan \n", "1. Dalam bahasa pemrograman, apa yang dimaksud dengan pernyataan kondisi (conditional statement)? Berikan contoh penggunaannya dalam sebuah program?\n", "2. Bagaimana perbedaan antara pernyataan pengulangan (looping) for dan while? Berikan contoh penggunaan keduanya dalam skenario yang berbeda?\n", "3. Jelaskan mengapa debugging penting dalam pengembangan perangkat lunak. Berikan contoh situasi di mana Anda harus menggunakan teknik debugging untuk mengidentifikasi kesalahan?\n", "4. Apa yang dimaksud dengan teknik refactoring dalam pemrograman? Berikan contoh kode sebelum dan setelah refactoring, serta jelaskan perubahan yang Anda lakukan?\n", "5. Mengapa prinsip-prinsip Clean Code penting dalam penulisan kode? Berikan contoh konkret bagaimana Anda dapat mengaplikasikan prinsip-prinsip Clean Code dalam sebuah program sederhana?" ] }, { "cell_type": "code", "execution_count": null, "id": "f224ab2a-21fc-4de7-92ce-e82c24c1417c", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.4" } }, "nbformat": 4, "nbformat_minor": 5 }