GNU/Linux >> Belajar Linux >  >> Linux

Cara:Pengantar Pemrograman – Kontrol Aliran

Seri Petunjuk

Ini adalah bagian 4 dari seri 5 bagian untuk Pengenalan Pemrograman

  1. Pengantar Pemrograman:Memulai
  2. Pengantar Pemrograman:Program Pertama Anda
  3. Pengantar Pemrograman:Variabel, Jenis, Dan Memanipulasi Data
  4. Pengantar Pemrograman:Kontrol Aliran
  5. Pengantar Pemrograman:Pemrograman Berorientasi Objek

Selamat Datang Kembali, Calon Programmer!

Dalam artikel ini, kita akan menjelajahi alur kontrol dan bagaimana Anda dapat menggunakan kondisi, cabang, loop, dan mekanisme lain untuk menentukan apa yang terjadi dalam program Anda.

Jika Anda belum membaca artikel sebelumnya dalam seri ini, saya sangat menyarankan Anda melakukannya. Kami sedang membangun di atas pengetahuan sebelumnya di semua artikel ini, jadi penting untuk pemahaman Anda bahwa Anda tahu apa yang telah kita bahas.

Kami memiliki banyak hal untuk dibahas dalam artikel ini, jadi tanpa upacara lebih lanjut, mari kita mulai bisnis.
.

Menangani Pengecualian

Ketika kami terakhir meninggalkan program kami, kami memiliki tiga baris kode dan masalah. Kodenya terlihat seperti ini:

Console.WriteLine("Guess a number between 1 and 10:");
string text = Console.ReadLine();
int input = int.Parse(text);

Namun, jika kita menjalankan program ini dan memasukkan apa pun kecuali angka saat diminta, program akan mogok karena kompilator tidak tahu cara mengubah teks non-numerik menjadi bilangan bulat.

Jika Anda ingat dari terakhir kali, kami mendapatkan apa yang disebut pengecualian , dan itu adalah salah satu cara kita dapat mengontrol aliran program dalam situasi yang sangat spesifik, yaitu ketika situasi luar biasa terjadi.

Saya ingin memulai dengan penanganan pengecualian karena ini adalah topik yang paling kompleks dan mungkin membingungkan dalam kontrol aliran, jadi jika Anda dapat memahami apa yang kami lakukan di sini, Anda mungkin akan menemukan konsep yang tersisa jauh lebih mudah untuk dipahami.

Untuk penanganan exception dalam pemrograman, kami memiliki dua ide penting yang harus Anda pahami. Ide pertama adalah Anda dapat meminta program Anda untuk mencoba sesuatu. Ide kedua adalah jika komputer gagal pada apa yang dicobanya, Anda dapat menangkap masalahnya dan menanganinya.

Kedua ide ini bersama-sama bekerja seperti pejalan kaki di atas tali dengan jaring pengaman. Seorang pejalan tali (program Anda) dapat tampil seperti biasa di sepanjang tali, dalam banyak kasus. Tetapi jika sesuatu yang tidak biasa terjadi, seperti salah melangkah dari tali (pengecualian), harus ada jaring pengaman untuk mencegah pemain jatuh ke tanah (tangkapan untuk menangani pengecualian).

Dengan pemahaman tentang penanganan pengecualian, sekarang kita dapat mulai melihat solusi untuk masalah kita. Kita dapat meminta komputer untuk mencoba mengurai teks menjadi bilangan bulat, dan jika gagal–daripada membiarkan program mogok–kita dapat mengetahui kesalahannya, memberi tahu pengguna, dan meminta mereka untuk mencoba lagi.

Mari kita lihat seperti apa tampilannya dalam kode kita.

Console.WriteLine("Guess a number between 1 and 10:");
string text = Console.ReadLine();
int input = 0;
try
{
    input = int.Parse(text);
}
catch
{
    Console.WriteLine("Whoops, you didn't enter a number");
}

Perubahan pertama kami adalah bahwa kami awalnya menyetel int input ke nol sebelum kita coba set ke hasil parsing input teks dari user. Ada alasan khusus mengapa saya pertama kali menetapkan nilai ke nol dan kemudian menyetelnya ke nilai lain nanti.

Perhatikan bahwa setelah try baris, kode yang ingin kita coba diapit oleh kurung kurawal seperti ini:

{
}

Dalam C# dan banyak bahasa serupa, kami menggunakan kurung kurawal untuk mencakup atau membatasi ruang lingkup tindakan, operasi, atau bahkan siklus hidup variabel tertentu. Umumnya, variabel hanya bertahan di dalam tanda kurung ini. Saat eksekusi kode kita keluar dari sekumpulan tanda kurung ini, variabel apa pun di dalamnya akan hilang (terkadang disebut out-of-scope).

Anda melihat tanda kurung kurawal yang sama setelah catch baris juga, yang merupakan instruksi bahwa apa pun yang ada di dalam kurung kurawal harus dieksekusi hanya jika kita menangkap kesalahan atau pengecualian. Kode di dalam kurung kurawal sering disebut blok kode .

Artinya jika kita telah membuat int masukan di dalam try blok kode, maka variabel akan hilang begitu saja setelah kita melewati try blok kode, dan kami tidak dapat lagi mengaksesnya untuk memeriksa apakah cocok dengan nilai rahasia kami. Saya akan membuat contoh dari kode kami untuk menunjukkan kepada Anda apa yang saya maksud. Perhatikan pada Gambar 1 di bawah ini bagaimana saya tidak mendefinisikan int masukan sampai kita berada di dalam kurung kurawal try pernyataan.

Gambar 1:Lingkup Variabel

Oh, dan perhatikan bahwa saya memiliki satu baris yang dimulai dengan // . Dalam C#, garis miring ganda menunjukkan bahwa apa pun yang muncul setelah itu dan sampai akhir baris adalah komentar yang bukan bagian dari program. Kompiler akan mengabaikan baris seperti itu.

.
Untuk mencoba program kita, kita dapat menempatkan breakpoint di dalam catch tanda kurung pada Console.WriteLine baris, dan kemudian jalankan program kami. Masukkan input non-numerik untuk memeriksa bahwa alih-alih mogok, program sekarang masuk ke catch blok kode, dan akhirnya menampilkan pesan kesalahan kepada pengguna, seperti yang Anda lihat pada Gambar 2.

Gambar 2:Pengecualian tertangkap!

.

Kondisi

Sekarang, kode ini agak tidak berguna seperti yang ditulis saat ini karena kami membaca nilai, tetapi–kecuali untuk memberi tahu pengguna jika mereka melakukan kesalahan–kami tidak menggunakan nilai untuk apa pun. Anda dapat mencoba ini dan melihat bahwa jika Anda memasukkan angka, katakanlah 7, breakpoint tidak tercapai.

Untuk membuat kode kita berguna sebagai permainan tebak-tebakan, kita perlu menguji apakah kita telah menebak angka yang benar. Di sini, kita perlu memperkenalkan konsep kontrol aliran baru yang disebut kondisi .

Kondisi adalah blok kode yang dijalankan hanya jika aturan atau kumpulan aturan tertentu terpenuhi. Kami memulai kondisi seperti itu dengan kata if dan ikuti dengan aturan atau kumpulan aturan yang kita periksa dalam tanda kurung, yang kemudian diikuti oleh blok kode yang ingin kita jalankan.

if (condition is met) 
{
    // execute this code block
}

Tentu saja ada aturan sintaks yang sangat ketat tentang bagaimana kita dapat memformat kondisi ini, dan mereka tidak harus seintuitif mungkin. Misalnya, untuk membandingkan nilai, Anda perlu menggunakan dua tanda sama dengan di C# dan terkadang tiga di JavaScript. (Ingat bahwa menggunakan satu tanda sama dengan adalah cara Anda menetapkan sebuah nilai.)

if (value == other_value) // example value comparison

Anda dapat menggunakan berbagai operator perbandingan dan sisanya sedikit lebih intuitif. Misalnya, seperti dalam matematika normal, Anda dapat menggunakan lebih besar dari (>) dan lebih kecil dari (<) dan menggabungkannya dengan tanda sama dengan untuk membuat kondisi lebih besar atau sama (>=) atau kurang dari atau sama (<=).

Anda juga dapat membuat kondisi negatif. Dalam banyak bahasa pemrograman, Anda menunjukkan operator negatif dengan tanda seru (!), yang juga sering disebut "bang". Misalnya, jika Anda ingin membuat kondisi yang dijalankan jika dua nilai tidak sama, Anda dapat menulis:

if (value != other_value)

Anda juga dapat membuat beberapa ketentuan dengan memisahkan ketentuan yang berbeda menggunakan && (ampersand ganda) untuk kondisi “DAN” atau || (pipa ganda) untuk kondisi “ATAU”.

if (value1 == other_value && value2 == other_value) … 
//means both value1 and value2 must be equal to other_value

if (value1 == other_value || value2 == other_value) … 
//means either value1 or value2 must be equal to other_value

Dengan menggunakan kondisi, sekarang kita dapat membuat tes untuk melihat apakah pemain telah menebak angka yang benar. Tambahkan baris berikut setelah kurung kurawal terakhir dari catch blok kode:

if (input == 3)
{
    Console.WriteLine("Congratulations! You guessed correctly!");
}

Kondisi ini menguji apakah input (nilai yang dimasukkan pengguna) sama dengan 3. Jika kondisi ini terpenuhi, game akan menampilkan catatan ucapan selamat, seperti yang ditunjukkan pada Gambar 3.

Gambar 3:Kondisi Terpenuhi, Selamat Diberikan

Jika pengguna tidak menebak angka 3, program kami tidak menampilkan apa-apa lagi, dan aplikasi berhenti.

Ingatlah bahwa Anda dapat menempatkan breakpoint di mana saja dalam kode Anda untuk menghentikan eksekusi dan melihat hasil dari apa yang Anda lakukan. Kami akan melakukannya untuk melihat hasil dari perubahan yang akan kami buat pada kode kami mulai sekarang.

.
Akan lebih baik, jika kita dapat menampilkan pesan lain jika pengguna tidak menebak nomor yang benar. Untungnya, kondisi juga memungkinkan perilaku ini melalui else kata kunci.

else kata kunci harus datang langsung setelah if blok kode dan menyatakan apa yang harus terjadi jika kondisi dalam tanda kurung if pernyataan tidak terpenuhi. Untuk mencobanya, tambahkan baris berikut setelah if blok:

else
{
    Console.WriteLine("No, sorry, that wasn't it. Better luck next time!");
}

Seluruh blok kode kondisional Anda sekarang akan terlihat seperti Gambar 4 di bawah ini.

Gambar 4:Menebak Kode Program Game dengan Blok Kode Bersyarat

Ketika Anda menjalankan program Anda, tergantung pada apakah Anda menebak 3, Anda akan mendapatkan ucapan selamat atau dorongan untuk mencoba lagi. Kami menyebut jenis kontrol aliran ini percabangan bersyarat karena program masuk ke satu atau beberapa cabang tergantung pada kondisi yang Anda ajukan.

Mari kita tingkatkan sedikit peluang bagi siapa saja yang tidak tahu bahwa angka ajaib selalu 3. Kami akan mengizinkan beberapa kali percobaan menebak jika pemain tidak menebak dengan benar.
.

Melakukan Perulangan

Untuk mencapai fungsi baru ini, kita perlu mengimplementasikan sesuatu yang disebut loop . Dalam pemrograman, loop adalah blok kode yang dieksekusi berulang kali. Dua jenis loop yang sangat umum adalah for loop dan sementara loop.

Penggunaan terbaik untuk for loop adalah ketika Anda memiliki berapa kali Anda ingin sesuatu terjadi. Mari kita mulai dengan itu dalam kode kita dan lihat ke mana arahnya.

Dalam for loop, Anda memerlukan kata kunci for diikuti oleh blok tanda kurung yang berisi tiga informasi.

Pertama, kami mendefinisikan lingkungan awal untuk loop kami, yang mencakup variabel yang ingin kami gunakan untuk melacak berapa kali blok kode kami telah dieksekusi. Kedua, kita menginginkan kondisi yang menentukan apakah kita harus melanjutkan perulangan. Akhirnya, kami memiliki perubahan yang ingin kami buat pada kondisi loop setiap kali kami menjalankan loop. Mari kita lihat contohnya.

for (int i = 0; i < 3; i++)
{
    // This code block will execute three times.
}

Yang penting di sini adalah baris pertama. Perhatikan titik koma yang memisahkan tiga bagian yang saya sebutkan. Begini cara setiap bagian dipecah:

int i=0; // Initialization: Creates an integer variable called "i" and sets it to 0.
i<3; // Condition: Continue executing as long as "i" is less than 3.
i++ // Change happening during each loop: "i" increases by one each time the loop runs.

i++ notasi adalah singkatan untuk menulis i=i+1 , yang menetapkan i dengan nilai i ditambah satu–dengan kata lain, itu meningkatkan i dengan satu. Anda bisa menulis i=i+1 juga, tetapi pola khusus ini sangat, sangat umum dalam pemrograman, jadi saya menunjukkannya sebagai contoh yang berguna.

Apa pun yang Anda masukkan ke dalam blok yang mengikuti for deklarasi loop akan terjadi selama kondisi terpenuhi – dalam hal ini, tiga kali. Misalnya, Anda dapat menambahkan Console.WriteLine() di dalam blok kode, dan akan berulang tiga kali, seperti pada Gambar 5 di bawah ini.

for (int i = 0; i < 3; i++)
{
    Console.WriteLine("I am in a loop!");
}

Gambar 5:“Saya dalam lingkaran!”

Kami ingin menggunakan loop semacam ini untuk memungkinkan pengguna mencoba beberapa kali untuk menebak nomor yang benar. Jadi, kita dapat membungkus seluruh program yang telah kita tulis di dalam for lingkaran seperti yang dijelaskan di atas. Kode sekarang akan terlihat seperti Gambar 6 di bawah ini.

Gambar 6:Menebak Loop

Tentu saja, jika Anda menebak angka yang benar sebelum mencapai tiga kali percobaan, tidak masuk akal untuk terus menebak. Karena itu, kita akan melakukan hal yang sangat buruk….

Ingat bahwa kondisi untuk eksekusi lanjutan adalah i tetap di bawah 3. Jadi, jika kita ingin menghentikan loop, kita cukup meningkatkan i ke 3 atau lebih untuk menghentikan loop. Jika Anda menambahkan i = 3 di dalam blok yang dieksekusi jika pengguna menebak dengan benar, seperti yang ditunjukkan pada Gambar 7 di bawah, permainan akan berhenti setelah pengguna menebak 3.

Gambar 7:Menghubung-singkat For Loop

Anda mungkin tidak mengerti mengapa ini adalah ide yang buruk, dan sungguh, ini lebih merupakan argumen filosofis daripada argumen teknis. Namun, ini adalah argumen yang penting jadi mari kita lakukan.

Sebuah for loop dirancang untuk mengeksekusi beberapa kali. Jika Anda tidak tahu sebelumnya berapa kali Anda akan mengeksekusi loop, maka for loop adalah pilihan yang buruk. Ada bentuk loop lain yang lebih cocok untuk tugas ini, jadi gunakan for loop memilih alat yang salah untuk pekerjaan itu.

Argumen ini mungkin tampak tidak penting dan bertele-tele. Program ini bekerja dengan baik sebagaimana adanya dan melakukan persis seperti yang Anda harapkan.

Namun, pikiran programmer adalah salah satu yang harus berjuang menuju kejelasan, dan contoh ini tentu saja tidak jelas. Melihat baris pertama dari kode kami saat ini, Anda pikir ini adalah loop yang berjalan tiga kali, tetapi kemudian kami "menipu" loop di tengah sehingga loop dapat berjalan di mana saja antara satu hingga tiga kali; tidak ada cara bagi kita untuk mengetahuinya. Kami telah melanggar kejelasan tentang apa yang akan terjadi, dan itu hal yang buruk.

Bahkan jika Anda tidak peduli dengan siapa pun yang membaca kode Anda, ingatlah bahwa sebagai programmer, kami bekerja dengan mesin yang tidak mampu memahami maksud. Ia mengerti persis apa yang kita katakan. Jika kita tidak jelas, kemungkinan kita mendapatkan hasil yang tidak terduga meningkat. Kita berisiko menciptakan masalah bagi diri kita sendiri saat program menjadi lebih kompleks.

Karena itu, kita perlu menemukan pendekatan yang lebih baik, dan pendekatan yang lebih baik itu adalah while lingkaran.
.

Perulangan Sementara

Sebuah while loop dijalankan saat kondisi benar. Tidak masalah berapa kali itu:selama kondisinya benar, loop terus berlanjut.

Sebuah while loop lebih sederhana dalam deklarasi daripada for loop dan terdiri dari kata kunci while diikuti oleh kurung buka, kondisi, dan kurung tutup.

while (condition) 
{
    // Code to execute
}

Eksekusi ini bisa sangat berbahaya jika Anda tidak memiliki kondisi yang jelas. Jika Anda membuat kesalahan atau tidak memperhitungkan semua kondisi dan kejadian dengan benar, program Anda dapat mengamuk dan menghentikan mesin Anda.

Bahayanya terletak pada memastikan bahwa Anda membatalkan kondisi di dalam blok kode saat Anda ingin eksekusi dihentikan. Jika tidak, loop akan berjalan selamanya.

Mari kita ubah for loop ke while loop dan biarkan berjalan selama pengguna belum menebak tiga kali. Kita dapat membuat kondisi ini dengan mendeklarasikan int i=0; sebelum loop dimulai dan kemudian menyetel nilai i di dalam lingkaran. Perbarui kode Anda seperti ini:

static void Main(string[] args)
{
    int i=0;
    while(i < 3)
    {
        Console.WriteLine("Guess a number between 1 and 10:");
        string text = Console.ReadLine();
        int input = 0;
        try
        {
            input = int.Parse(text);
        }
        catch
        {
            Console.WriteLine("Whoops, you didn't enter a number");
        }
        if (input == 3)
        {
            Console.WriteLine("Congratulations! You guessed correctly!");
            i = 3;
        }
        else
        {
            Console.WriteLine("No, sorry, that wasn't it. Better luck next time!");
        }
    }
}

Perhatikan bahwa ada kesalahan dalam kode ini, yang menunjukkan betapa mudahnya membuat loop tak terbatas. Kami tidak meningkatkan i kecuali kita menebak dengan benar! Dengan kata lain, pemain mendapat percobaan tak terbatas, tetapi tidak ada cara untuk berhenti menebak jika mereka tidak menebak dengan benar!

Untungnya, jika Anda memulai program ini, Anda tahu jawabannya tetap ke 3 sehingga Anda dapat menebaknya, tetapi jika tidak, Anda mungkin menghadapi masalah besar.

Saya mengatakan ini untuk tidak menakut-nakuti Anda menggunakan while loop melainkan untuk menanamkan rasa hormat untuk kekuatan mereka. While loop sangat kuat dan berguna tetapi juga bisa berbahaya jika Anda tidak berhati-hati.

Untuk memperbaiki masalah Anda, tambahkan i++; sebagai baris pertama di dalam blok kode while, tepat sebelum Console.WriteLine("Guess a number between 1 and 10:") . Kode Anda sekarang akan berfungsi seperti yang diharapkan, menjadi sangat jelas, dan memberi Anda permainan tebak-tebakan yang sangat mendasar namun membosankan.
.

Pratinjau Orientasi Objek

Jadi apa yang bisa kita lakukan untuk membuat game ini jauh lebih menarik? Saya tahu, mari kita buat nomor rahasianya menjadi acak!

Saya menahan diri melakukan ini karena kita perlu memperkenalkan beberapa ide baru untuk membuat angka acak. Ide-ide ini akan menjadi jelas dalam artikel berikutnya yang berhubungan dengan orientasi objek. Untuk saat ini, izinkan saya memberi Anda kodenya dan saya akan menjelaskan secara rinci apa fungsinya di artikel terakhir dari seri ini.

static void Main(string[] args)
{
    Random random = new Random(); // Object orientation stuff
    int answer = random.Next(10)+1; // Give me a random number less than 10 and add one
    int i = 0;
    while (i < 3)
    {
        i++;
        Console.WriteLine("Guess a number between 1 and 10:");
        string text = Console.ReadLine();
        int input = 0;
        try
        {
            input = int.Parse(text);
        }
        catch
        {
            Console.WriteLine("Whoops, you didn't enter a number");
        }
        if (input == answer)
        {
            Console.WriteLine("Congratulations! You guessed correctly!");
            i = 3;
        }
        else
        {
            Console.WriteLine("No, sorry, that wasn't it. Better luck next time!");
        }
    }
}

Ada dua baris baru sekarang dan satu baris yang diubah. Baris baru membuat answer integer bilangan bulat acak antara 1 dan 10, dan di baris yang diubah kami membandingkan apa yang ditebak pengguna dengan jawaban acak itu.

Jangan khawatir tentang generasi acak untuk saat ini, saya akan menjelaskannya di artikel berikutnya. Namun untuk saat ini, selamat, Anda dengan ini resmi menjadi pengembang game selain menjadi seorang programmer! Jangan ragu untuk memainkan game ini sekarang dan lihat bagaimana tarif Anda. Anda harus mengalahkan permainan, rata-rata, 3 dari 10 kali.

Sebagai latihan tambahan untuk diri Anda sendiri, mengapa Anda tidak menambahkan pesan setelah permainan berakhir yang memberi tahu pemain apa nomor rahasianya? Namun, untuk saat ini, mari kita selesaikan dan membahas apa yang telah kita bahas.
.

Penutup

Dalam artikel ini, Anda telah mempelajari tentang aliran program dan bagaimana Anda dapat mengontrol aliran program Anda. Anda telah belajar tentang pengecualian untuk menangani kesalahan. Anda telah mempelajari blok kode dan percabangan bersyarat dengan if dan else . Anda juga telah belajar tentang perulangan dengan for dan while .

Di artikel berikutnya, kita akan meluangkan sedikit waktu untuk menyempurnakan permainan, dan kita juga akan melihat orientasi objek secara lebih mendetail.

Seri Petunjuk

Ini adalah bagian 4 dari seri 5 bagian untuk Pengenalan Pemrograman

  1. Pengantar Pemrograman:Memulai
  2. Pengantar Pemrograman:Program Pertama Anda
  3. Pengantar Pemrograman:Variabel, Jenis, Dan Memanipulasi Data
  4. Pengantar Pemrograman:Kontrol Aliran
  5. Pengantar Pemrograman:Pemrograman Berorientasi Objek

Linux
  1. Bahasa Pemrograman C - Pendahuluan

  2. Cara Memulai Belajar Bahasa Pemrograman

  3. Bagaimana Cara Mengarahkan Output Program Ke File Zip??

  1. Cara Menginstal Bahasa Pemrograman Nim Di Linux

  2. Pengantar Sistem Kontrol Versi

  3. Cara:Pemrograman Socket dengan Python

  1. Cara Mengontrol Vagrant Box Menggunakan perintah Vagrant

  2. Cara Menginstal Bahasa Pemrograman Go di Alpine Linux

  3. Cara Membuat Situs Web di Panel Kontrol Vesta