Menu
CoddyTech

Konsistensi const

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 8 dari 61.

Saat menulis fungsi yang bertindak sebagai method, beberapa fungsi seharusnya mengubah object (seperti player_take_damage), sedangkan fungsi lainnya hanya membaca data tanpa mengubah apa pun. Kata kunci const memungkinkanmu menegakkan perbedaan ini pada tingkat compiler.

Dengan menandai parameter pointer sebagai const, kamu menjamin bahwa fungsi tidak akan mengubah data yang ditunjuknya. Jika kamu tidak sengaja mencoba mengubah sebuah anggota, compiler akan menghasilkan error:

typedef struct {
    int x;
    int y;
} Point;

// Fungsi ini hanya dapat MEMBACA point
void point_print(const Point *self) {
    printf("(%d, %d)\n", self->x, self->y);
    // self->x = 10;  // ERROR: tidak dapat mengubah melalui pointer const
}

// Fungsi ini dapat MENGUBAH point
void point_move(Point *self, int dx, int dy) {
    self->x += dx;
    self->y += dy;
}

Parameter const Point *self memberi tahu compiler dan programmer lain bahwa point_print adalah operasi "getter" atau hanya-baca. Ini disebut ketepatan const: menggunakan const di mana pun perubahan tidak diperlukan.

Latihan ini menemukan bug sejak awal. Jika kamu menulis fungsi display dan tanpa sengaja mengubah sebuah field, compiler akan langsung menghentikanmu agar bug itu tidak lolos ke dalam programmu.

challenge icon

Tantangan

Mudah

Mari buat module Temperature yang menyimpan nilai suhu dan menyediakan operasi hanya-baca serta operasi yang mengubah data. Ini akan membantumu berlatih menggunakan pointer const untuk membedakan dengan jelas fungsi yang hanya membaca data dan fungsi yang mengubahnya.

Kamu akan membuat tiga file:

  • temperature.h: Deklarasikan struct Temperature dengan satu anggota double celsius. Deklarasikan juga tiga fungsi:
    • temp_display: menerima pointer const ke Temperature dan mencetak suhu saat ini (hanya-baca)
    • temp_adjust: menerima pointer biasa ke Temperature dan nilai double, lalu menambahkan nilai tersebut ke celsius (mengubah data)
    • temp_to_fahrenheit: menerima pointer const ke Temperature dan mengembalikan nilai yang dikonversi ke Fahrenheit (hanya-baca)
    Gunakan include guard dengan simbol TEMPERATURE_H.
  • temperature.c: Implementasikan ketiga fungsi. Fungsi temp_display harus mencetak dengan format Current: {celsius}C. Fungsi temp_to_fahrenheit harus mengembalikan celsius * 9.0 / 5.0 + 32.0. Ingat, fungsi yang menggunakan pointer const tidak dapat mengubah data struct.
  • main.c: Buat Temperature, lakukan operasi, lalu tampilkan hasilnya.

Kamu akan menerima dua input: nilai celsius awal (sebagai double) dan jumlah penyesuaian (sebagai double).

Di file utamamu:

  1. Inisialisasi Temperature dengan nilai celsius awal
  2. Panggil temp_display untuk menampilkan suhu awal
  3. Panggil temp_adjust untuk mengubah suhu sebesar jumlah penyesuaian
  4. Panggil temp_display lagi untuk menampilkan suhu yang telah diperbarui
  5. Cetak konversi Fahrenheit menggunakan temp_to_fahrenheit

Cetak hasil dengan format berikut:

Current: {celsius}C
Current: {celsius}C
Fahrenheit: {fahrenheit}F

Gunakan %.1f untuk semua nilai suhu agar ditampilkan dengan satu angka di belakang koma.

Contohnya, dengan nilai awal 20.0 dan penyesuaian 5.0, outputnya adalah:

Current: 20.0C
Current: 25.0C
Fahrenheit: 77.0F

Coba sendiri

#include <stdio.h>
#include "temperature.h"

int main() {
    double initial_celsius, adjustment;
    scanf("%lf", &initial_celsius);
    scanf("%lf", &adjustment);
    
    // TODO: Buat struct Temperature dan inisialisasi dengan initial_celsius
    
    // TODO: Panggil temp_display untuk menampilkan suhu awal
    
    // TODO: Panggil temp_adjust untuk mengubah suhu sebesar nilai adjustment
    
    // TODO: Panggil temp_display lagi untuk menampilkan suhu yang sudah diperbarui
    
    // TODO: Cetak hasil konversi ke Fahrenheit menggunakan temp_to_fahrenheit
    // Format: "Fahrenheit: %.1fF\n"
    
    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C online