Langsung ke konten utama

ARTI PENULISAN KODE PADA FUNGSI def pilih_nada():

 ARTI PENULISAN KODE PADA FUNGSI def pilih_nada():


Tolong dengan secara ringkas beri arti dari penulisan kode pada fungsi pilih_nada berikut:

# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()


        # Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected

        result = level_gn(id_selected, progres_selected, mode_selected, level_gn_selected)


        # Tampilkan data ke dalam entry

        entry_bass_1.delete(0, tk.END)

        entry_bass_1.insert(0, result["Bass_1"])


        entry_trebel_1.delete(0, tk.END)

        entry_trebel_1.insert(0, result["Trebel_1"])


        entry_bass_2.delete(0, tk.END)

        entry_bass_2.insert(0, result["Bass_2"])


             # Penanganan khusus untuk Trebel_2

        entry_trebel_2.delete(0, tk.END)

        if mode_selected == 'naik':

            if id_selected == 3:

                sel_value = "Trebel_2 tidak ikut" # Tampilkan teks khusus

            else:

                sel_value = result.get("Trebel_2", "")

        elif mode_selected == 'turun':

            if id_selected == 1:

                sel_value = "Trebel_2 tidak ikut" # Tampilkan teks khusus

            else:

                sel_value = result.get("Trebel_2", "")

        else:

            sel_value = result.get("Trebel_2", "")

        entry_trebel_2.insert(0, sel_value)


        # Penanganan khusus untuk Bass_3

        entry_bass_3.delete(0, tk.END)

        if mode_selected == 'naik':

            if id_selected in [2, 3]:

                sel_value = "Bass_3 tidak ikut" # Tampilkan teks khusus

            else:

                sel_value = result.get("Bass_3", "")

        elif mode_selected == 'turun':

            if id_selected in [1, 2]:

                sel_value = "Bass_3 tidak ikut" # Tampilkan teks khusus

            else:

                sel_value = result.get("Bass_3", "")

        else:

            sel_value = result.get("Bass_3", "")

        entry_bass_3.insert(0, sel_value)


    except Exception as e:

        print("Error:", e)


# Fungsi untuk mengurangi setiap digit pada bass dan trebel

def adjust_value(value, pengurang):

    adjusted_value = ''.join(str(max(-9, int(digit) - pengurang)) if digit.isdigit() else digit for digit in value)

    return adjusted_value


# Fungsi untuk menerapkan pengurangan tambahan berdasarkan progres

def apply_progres_adjustment(value, progres_selected):

    if progres_selected == 2:

        return adjust_value(value, 1)

    elif progres_selected == 3:

        return adjust_value(value, 2)

    return value


# Pengurangan pada Bass dan Trebel tergantung pada Level Gn dan Progres

def level_gn(id, progres_selected, mode_selected, level_gn_selected):

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    # Query untuk pengambilan data dari tabel Gn_Biru

    query = """

        SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (id,))

    data = cursor.fetchone()


    bass_1, trebel_1, bass_2, trebel_2, bass_3 = data


    # Tentukan pengurang berdasarkan level_gn

    if level_gn_selected in [1, 2, 3]:

        pengurang = 0

    elif level_gn_selected in [4, 5, 6]:

        pengurang = 1

    elif level_gn_selected in [7, 8, 9]:

        pengurang = 2

    elif level_gn_selected in [10, 11, 12]:

        pengurang = 3


    # Sesuaikan nilai Bass dan Trebel dengan pengurang level_gn

    bass_1 = adjust_value(bass_1, pengurang)

    trebel_1 = adjust_value(trebel_1, pengurang)

    bass_2 = adjust_value(bass_2, pengurang)

    trebel_2 = adjust_value(trebel_2, pengurang)

    bass_3 = adjust_value(bass_3, pengurang)


    # Terapkan pengurangan tambahan berdasarkan progres

    trebel_1 = apply_progres_adjustment(trebel_1, progres_selected)

    trebel_2 = apply_progres_adjustment(trebel_2, progres_selected)


    conn.close()


    # Return hasil

    result = {

        "Bass_1": bass_1,

        "Trebel_1": trebel_1,

        "Bass_2": bass_2,

        "Trebel_2": trebel_2,

        "Bass_3": bass_3

    }

    return result

    

    # Pengaturan tambahan berdasarkan progres dan mode

    if progres_selected == 1:

        if mode_selected == "naik" or mode_selected == "turun":

        # Tidak ada penyesuaian tambahan

            pass

    elif progres_selected == 2:

        new_id_value = ambil_new_id_value(id_selected, progres_selected, mode_selected)

        if mode_selected == "naik":

            trebel_1 = adjust_id_trebel_progres2_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=1)

            trebel_2 = adjust_id_trebel_progres2_naik_value(trebel_2, ambil_data_trebel(new_id_value, 'Trebel_2'), pengurang=1)

        elif mode_selected == "turun":

            trebel_1 = adjust_id_trebel_progres2_turun_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=1)

            trebel_2 = adjust_id_trebel_progres2_turun_value(trebel_2, ambil_data_trebel(new_id_value, 'Trebel_2'), pengurang=1)

    elif progres_selected == 3:

        new_id_value = ambil_new_id_value(id, progres, mode)

        if mode_selected == "naik":

            trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=2)

            trebel_2 = adjust_id_trebel_progres3_naik_value(trebel_2, ambil_data_trebel(new_id_value, 'Trebel_2'), pengurang=2)

        elif mode_selected == "turun":

            trebel_1 = adjust_id_trebel_progres3_turun_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=2)

            trebel_2 = adjust_id_trebel_progres3_turun_value(trebel_2, ambil_data_trebel(new_id_value, 'Trebel_2'), pengurang=2)

            

# Fungsi untuk mengambil ID target berdasarkan progres dan mode

def ambil_new_id_value(id_selected, progres_selected, mode_selected):

    if progres_selected == 2:

        if mode_selected == "naik":

            if id_selected == 1:

                trebel_2_id_1 = get_trebel_2_data(id=1) # Asumsikan fungsi ini untuk mengambil data

        # Lakukan pengurangan digit sesuai dengan fungsi adjust_value dan apply_progres_adjustment

                trebel_2_id_1 = apply_progres_adjustment(trebel_2_id_1, progres_selected)

        # Simpan perubahan ke database atau update GUI                   

                update_trebel_2_data(id=1, new_value=trebel_2_id_1)

            

            elif id_selected == 2:

                return 1

            elif id_selected == 3:

                return 2

        elif mode_selected == "turun":

            if id_selected == 1:

                return 2

            elif id_selected == 2:

                return 3

            elif id_selected == 3:

                trebel_2_id_3 = get_trebel_2_data(id=3) # Asumsikan fungsi ini untuk mengambil data

        # Lakukan pengurangan digit sesuai dengan fungsi adjust_value dan apply_progres_adjustment

                trebel_2_id_3 = apply_progres_adjustment(trebel_2_id_3, progres_selected)

        # Simpan perubahan ke database atau update GUI               

                update_trebel_2_data(id=3, new_value=trebel_2_id_3)        

            

    elif progres_selected == 3:

        if mode_selected == "naik":

            if id_selected == 1:

                return 2

            elif id_selected == 2:

                return 3

            elif id_selected == 3:

                return 1

        elif mode_selected == "turun":

            if id_selected == 1:

                return 3

            elif id_selected == 2:

                return 1

            elif id_selected == 3:

                return 2


# Fungsi untuk mengambil data Trebel dari ID yang berbeda

def ambil_data_trebel(id_selected, target_id, kolom):

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    query = f"""

        SELECT {kolom}

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (target_id,))

    data = cursor.fetchone()

    conn.close()

    return data[0]



# Fungsi adjust untuk berbagai progres dan mode

def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


Secara ringkas, berikut adalah penjelasan dari kode `pilih_nada()` dan fungsi terkait:


1. **Fungsi `pilih_nada()`**:

   - Fungsi ini mengambil nilai level, ID, progres, dan mode yang dipilih dari pengguna.

   - Berdasarkan nilai-nilai tersebut, fungsi memanggil `level_gn()` untuk mengambil data Bass dan Trebel dari tabel database (`Gn_Biru`).

   - Data yang diambil (Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3) kemudian ditampilkan ke dalam entry (kotak teks) di GUI tkinter.

   - Ada penanganan khusus untuk Bass_3 dan Trebel_2 berdasarkan ID dan mode (naik atau turun), di mana pada kondisi tertentu teks "tidak ikut" ditampilkan.


2. **Fungsi `adjust_value()`**:

   - Fungsi ini mengurangi setiap digit pada nilai yang diberikan sesuai dengan pengurang yang ditentukan, untuk menyesuaikan nilai Bass dan Trebel.

   

3. **Fungsi `apply_progres_adjustment()`**:

   - Fungsi ini menambahkan pengurangan lebih lanjut pada nilai-nilai Bass dan Trebel berdasarkan progres yang dipilih (progres 2 atau 3).


4. **Fungsi `level_gn()`**:

   - Fungsi ini mengambil data dari tabel `Gn_Biru` di database dan melakukan penyesuaian nilai Bass dan Trebel berdasarkan level yang dipilih.

   - Ada pengurangan tambahan pada Trebel berdasarkan progres yang dipilih.

   - Hasil penyesuaian dikembalikan dalam bentuk dictionary untuk digunakan di fungsi `pilih_nada()`.


5. **Fungsi `ambil_new_id_value()` dan `ambil_data_trebel()`**:

   - `ambil_new_id_value()` mengambil ID baru berdasarkan progres dan mode untuk menyesuaikan nilai Trebel.

   - `ambil_data_trebel()` mengambil data Trebel dari ID yang berbeda sesuai kebutuhan.


6. **Fungsi `adjust_id_trebel_progres2_naik_value()` dan `adjust_id_trebel_progres2_turun_value()`**:

   - Fungsi ini menyesuaikan nilai Trebel untuk progres 2 dan 3, baik dalam mode naik maupun turun, dengan melakukan pengurangan pada digit sesuai logika tertentu.


Secara keseluruhan, fungsi-fungsi ini berfungsi untuk mengambil data dari database, menyesuaikan nilai berdasarkan berbagai faktor (progres, level, mode), dan menampilkannya pada interface GUI.


Arti secara lengkapnya tolong berikan


Berikut adalah penjelasan lengkap mengenai fungsi `pilih_nada()` dan bagian terkait dalam kode:


### Fungsi `pilih_nada()`

Fungsi ini digunakan untuk menampilkan data Bass dan Trebel pada beberapa EntryBox setelah pengguna memilih data tertentu berdasarkan **ID**, **Level_Gn**, **Progres**, dan **Mode**. Fungsi ini juga menangani beberapa penyesuaian nilai data Bass dan Trebel tergantung pada **mode** (naik/turun) dan **progres** (1, 2, atau 3).


1. **Pengambilan Data dari Entry**

   - `level_gn_selected`, `id_selected`, `progres_selected`, dan `mode_selected` diambil dari inputan pengguna pada EntryBox atau `Combobox`.

   - `level_gn()` dipanggil untuk mengambil data dari tabel **Gn_Biru** berdasarkan parameter yang dimasukkan.


2. **Pengisian Data ke EntryBox**

   - Data Bass dan Trebel yang didapatkan dimasukkan ke dalam EntryBox terkait:

     - `entry_bass_1`, `entry_trebel_1`, `entry_bass_2`, `entry_trebel_2`, `entry_bass_3`.

   - Terdapat logika khusus untuk mengisi data pada **Trebel_2** dan **Bass_3** sesuai dengan **mode** (naik/turun) dan **id**.


3. **Penanganan Khusus untuk Trebel_2**

   - Jika mode adalah **"naik"**, maka:

     - Jika ID adalah 3, **Trebel_2** tidak diisi, melainkan diisi dengan teks "Trebel_2 tidak ikut".

   - Jika mode adalah **"turun"**, maka:

     - Jika ID adalah 1, **Trebel_2** tidak diisi, sama seperti di atas.

   - Pada situasi lainnya, **Trebel_2** akan diambil dari hasil data `result["Trebel_2"]`.


4. **Penanganan Khusus untuk Bass_3**

   - Jika mode adalah **"naik"**, maka:

     - Jika ID adalah 2 atau 3, **Bass_3** tidak diisi, dengan teks "Bass_3 tidak ikut".

   - Jika mode adalah **"turun"**, maka:

     - Jika ID adalah 1 atau 2, **Bass_3** juga tidak diisi.

   - Pada situasi lainnya, **Bass_3** akan diambil dari hasil data `result["Bass_3"]`.


### Fungsi `adjust_value()`

Fungsi ini digunakan untuk mengurangi setiap digit dalam string angka berdasarkan nilai pengurang yang diberikan. Setiap digit angka dikurangi dengan `pengurang`, dan hasilnya dikembalikan sebagai string.


- Jika string bukan angka (misalnya karakter non-digit), maka karakter tersebut tetap tidak berubah.

- Jika karakter adalah angka, maka ia dikurangi dengan nilai pengurang, kecuali jika hasilnya lebih kecil dari -9 (batas minimal).


### Fungsi `apply_progres_adjustment()`

Fungsi ini menerapkan penyesuaian tambahan berdasarkan **progres**. Jika **progres** adalah 2 atau 3, maka nilai digit dari Trebel akan dikurangi lebih lanjut:

- Untuk **progres 2**, setiap angka dikurangi dengan 1.

- Untuk **progres 3**, setiap angka dikurangi dengan 2.


Fungsi ini menggunakan `adjust_value()` untuk menerapkan penyesuaian tersebut.


### Fungsi `level_gn()`

Fungsi ini berfungsi untuk mengambil data Bass dan Trebel dari tabel **Gn_Biru** di database **DATAMUSIK.db** berdasarkan **ID** yang dipilih. Setelah data diambil, penyesuaian diterapkan berdasarkan **level_gn_selected** dan **progres_selected**:


1. **Query Database**

   - Fungsi melakukan query SQL untuk mengambil kolom **Bass_1**, **Trebel_1**, **Bass_2**, **Trebel_2**, dan **Bass_3** dari tabel **Gn_Biru** berdasarkan ID yang dipilih pengguna.

   

2. **Penyesuaian Nilai Bass dan Trebel berdasarkan Level_Gn**

   - Jika Level_Gn termasuk ke dalam rentang 1-3, maka tidak ada penyesuaian.

   - Jika Level_Gn termasuk dalam rentang 4-6, semua digit dalam Bass dan Trebel dikurangi 1.

   - Jika Level_Gn termasuk dalam rentang 7-9, semua digit dikurangi 2.

   - Jika Level_Gn termasuk dalam rentang 10-12, semua digit dikurangi 3.

   

3. **Penyesuaian berdasarkan Progres**

   - Setelah penyesuaian berdasarkan **Level_Gn**, Bass dan Trebel kembali disesuaikan berdasarkan **progres** yang dipilih, menggunakan fungsi `apply_progres_adjustment()`.


4. **Mengembalikan Hasil**

   - Hasil berupa dictionary dengan key `"Bass_1"`, `"Trebel_1"`, `"Bass_2"`, `"Trebel_2"`, dan `"Bass_3"` yang menyimpan nilai-nilai Bass dan Trebel yang telah disesuaikan.


### Fungsi `ambil_new_id_value()`

Fungsi ini digunakan untuk menentukan **ID** baru berdasarkan **progres** dan **mode**:

- Pada **progres 2**:

  - Jika mode adalah **"naik"**, maka ID baru yang diambil tergantung pada ID saat ini. Sebagai contoh, jika **ID = 1**, maka **ID** baru akan diambil dari **Trebel_2** pada ID = 1.

  - Jika mode adalah **"turun"**, nilai ID baru ditentukan dengan menggeser nilai ID (misalnya ID = 1 menjadi ID = 2).

- Pada **progres 3**, logika serupa diterapkan untuk menentukan ID baru tergantung pada **mode** (naik/turun).


### Fungsi `ambil_data_trebel()`

Fungsi ini digunakan untuk mengambil data Trebel tertentu dari tabel **Gn_Biru** berdasarkan **ID** yang diberikan. Data yang diambil adalah salah satu kolom **Trebel_1** atau **Trebel_2** tergantung inputan.


### Fungsi `adjust_id_trebel_progres2_naik_value()`

Fungsi ini digunakan untuk melakukan penyesuaian pada Trebel ketika **progres = 2** dan **mode = naik**. Penyesuaian dilakukan dengan mengurangi digit pertama dari **Trebel_1** dan **Trebel_2** sesuai dengan aturan yang telah ditentukan.


### Fungsi `adjust_id_trebel_progres2_turun_value()`

Fungsi ini serupa dengan `adjust_id_trebel_progres2_naik_value()`, tetapi digunakan ketika mode adalah **"turun"**. Penyesuaian dilakukan dengan mengurangi digit pertama dan seterusnya berdasarkan **ID** dan progres yang dipilih.


### Kesimpulan

- Fungsi `pilih_nada()` mengintegrasikan pengambilan data dari database, penerapan logika berdasarkan **mode**, **progres**, dan **level_gn**, serta menampilkan hasilnya pada EntryBox.

- Kode tersebut secara dinamis menyesuaikan nilai Bass dan Trebel berdasarkan aturan yang kompleks tergantung pada kombinasi dari **ID**, **progres**, **mode**, dan **Level_Gn** yang dipilih oleh pengguna.



Tolong periksa kode berikut pada bagian fungsi pilih_nada, untuk mengecek data trebel_1 dan trebel_2 pada kondisi level_gn_selected = 1, id_selected = 3, mode naik, progres_selected = 2,  maka data trebel_1 diambil dari trebel_1 id 2 dan data trebel_2 kosong. kemudian data trebel_1 id 2 tersebut dimodifikasi

Lalu di progres_selected = 3 maka data trebel_1 diambil dari trebel_1 id 1 dan data trebel_2 kosong.

Lalu pada kondisi level_gn_selected = 1, id_selected = 3, progres_selected = 2, mode= turun, maka data trebel_1 diambil dari trebel_1 id 1, dan data trebel_2 diambil dari trebel_2 id 3. Kemudian mengecek data trebel_1 dan trebel_2 pada kondisi level_gn_selected = 3, id_selected = 1, progres_selected = 2, mode= naik, maka data trebel_1 diambil dari trebel_1 id 3 dan data trebel_2 diambil dari trebel_2 id 1. Lalu pada kondisi level_gn_selected = 3, id_selected = 1, progres_selected = 2, mode= turun, maka data trebel_1 diambil dari trebel_1 id 2, dan data trebel_2 kosong

Komentar

Postingan populer dari blog ini

Pemograman R Studio

  Metode Numerik Menggunakan R Pengantar Gambaran Isi Buku Cara Berkontribusi dalam Buku Ini Ucapan Terima Kasih Lisensi 1  Bahasa Pemrograman R 1.1  Sejarah R 1.2  Fitur dan Karakteristik R 1.3  Kelebihan dan Kekurangan R 1.4  RStudio 1.5  Menginstall R dan RStudio 1.6  Working Directory 1.6.1  Mengubah Lokasi Working Directory 1.6.2  Mengubah Lokasi Working Directory Default 1.7  Memasang dan Mengaktifkan Paket R 1.8  Fasilitas Help 1.8.1  Mencari Help dari Suatu Perintah Tertentu 1.8.2  General Help 1.8.3  Fasilitas Help Lainnya 1.9  Referensi 2  Kalkulasi Menggunakan R 2.1  Operator Aritmatik 2.2  Fungsi Aritmetik 2.3  Operator Relasi 2.4  Operator Logika 2.5  Memasukkan Nilai Kedalam Variabel 2.6  Tipe dan Struktur Data 2.7  Vektor 2.7.1  Membuat vektor 2.7.2  Missing Values 2.7.3  Subset Pada Vektor 2.7.4  Operasi Matematis Menggunakan Vektor ...

MIGRASI DATABASE DARI SQLite KE MySQL (Part-1)

  MIGRASI DATABASE DARI SQLite KE MySQL (Part-1) Pemakaian yang mana lebih baik dalam membuat database_musik di mysql atau Exel yang cell Cell pada tabel dilakukan operasi fungsi logika matematika. Untuk keperluan membuat database atau tabel yang memerlukan operasi logika atau matematika, seperti yang Anda sebutkan, MySQL jauh lebih baik dibandingkan Excel. Berikut adalah beberapa alasan mengapa MySQL lebih disarankan: 1. **Kapasitas dan Skalabilitas**: MySQL dapat menangani jumlah data yang jauh lebih besar daripada Excel. Ini penting jika Anda berencana untuk menyimpan banyak data atau melakukan operasi yang kompleks di atas data tersebut. 2. **Kekuatan dan Kinerja**: MySQL dirancang khusus untuk memproses query dan operasi basis data dengan cepat. Ini termasuk operasi matematika, logika, dan agregasi data yang umum dilakukan dalam aplikasi. 3. **Fleksibilitas Struktur**: Dalam MySQL, Anda dapat dengan mudah menentukan struktur tabel yang kompleks dan melakukan kueri yang lebih r...

Cara Menjadi Pengembang Front End – Keterampilan Front End Web Dev

  Menyumbangkan Belajar coding —  kurikulum 3.000 jam gratis 10 JUNI 2022 / #PENGEMBANGAN UJUNG DEPAN Bagaimana Menjadi Pengembang Front End – Keterampilan Front End Web Dev Joel Olawanle Beberapa profesional dengan bayaran tertinggi di dunia adalah pengembang front-end.  Mereka menggunakan pengetahuan dan bakat mereka untuk merancang situs web yang menarik dan ramah pengguna. Pengembang front-end tidak memerlukan gelar atau sertifikat sekolah untuk bekerja.  Sebaliknya, mereka harus memahami dasar-dasar pengembangan front-end, bahasa pemrograman, dan kerangka kerja pengembangan front-end. Dalam panduan ini, Anda akan belajar bagaimana menjadi pengembang front end dengan terlebih dahulu memahami apa yang dimaksud dengan pengembangan front end, keterampilan teknis dan soft skill yang diperlukan, bahasa dan kerangka kerja yang tersedia, dan beberapa langkah untuk memulai. Seorang pengembang front-end di Amerika Serikat dapat memperoleh rata-rata $86,178 per tahun, menu...