Display and debug

See this chapter on YouTube

Variabel sederhana di Rust bisa di-print/dicetak menggunakan {} di dalam println!. Namun beberapa variabel tidak bisa, dan Anda perlu menggunakan debug print. Debug print adalah print untuk keperluan si programmer, karena debug print biasanya memunculkan lebih banyak informasi. Terkadang debug terlihat tidak nyaman dipandang, namun itu dikarenakan ia memiliki informasi ekstra untuk membantu Anda.

Bagaimana kita mengetahui jika kita membutuhkan {:?}, bukan {}? Compiler akan memberitahukannya untuk Anda. Sebagai contoh:

fn main() {
    let doesnt_print = ();
    println!("This will not print: {}", doesnt_print); // ⚠️
}

Jika kita menjalankan ini, compiler akan mengatakan:

error[E0277]: `()` doesn't implement `std::fmt::Display`
 --> src\main.rs:3:41
  |
3 |     println!("This will not print: {}", doesnt_print);
  |                                         ^^^^^^^^^^^^ `()` cannot be formatted with the default formatter
  |
  = help: the trait `std::fmt::Display` is not implemented for `()`
  = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
  = note: required by `std::fmt::Display::fmt`
  = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

Banyak sekali informasi yang diberikan oleh compiler. Tapi bagian terpentingnya adalah: you may be able to use {:?} (or {:#?} for pretty-print) instead. Ini artinya Anda bisa mencoba {:?}, dan juga {:#?}. {:#?} disebut juga sebagai "pretty printing". "Pretty printing" ini mirip seperti {:?}, namun mencetak dengan format yang berbeda.

Jadi, Display artinya mem-print/mencetak dengan {}, dan Debug artinya mem-print dengan {:?}.

Satu hal lagi: Anda juga bisa menggunakan print! tanpa ln jika Anda tidak menghendaki new line/baris baru.

fn main() {
    print!("This will not print a new line");
    println!(" so this will be on the same line");
}

Maka hasilnya adalah This will not print a new line so this will be on the same line.

Smallest and largest numbers

Jika Anda ingin melihat angka yang terkecil dan yang terbesar, Anda bisa menggunakan MIN dan MAX. std artinya "standard library" dan memiliki semua fungsi-fungsi yang umum digunakan di Rust. Nantinya, kita akan mempelajari tentang standard library. Tapi untuk sekarang ini, Anda bisa mengingat bahwa inilah cara mendapatkan angka terkecil dan juga angka terbesar dari sebuah type.

fn main() {
    println!("The smallest i8 is {} and the biggest i8 is {}.", std::i8::MIN, std::i8::MAX); // catatan: mencetak std::i8::MIN artinya "mencetak MIN yang berada di dalam bagian i8 pada standard library"
    println!("The smallest u8 is {} and the biggest u8 is {}.", std::u8::MIN, std::u8::MAX);
    println!("The smallest i16 is {} and the biggest i16 is {}.", std::i16::MIN, std::i16::MAX);
    println!("The smallest u16 is {} and the biggest u16 is {}.", std::u16::MIN, std::u16::MAX);
    println!("The smallest i32 is {} and the biggest i32 is {}.", std::i32::MIN, std::i32::MAX);
    println!("The smallest u32 is {} and the biggest u32 is {}.", std::u32::MIN, std::u32::MAX);
    println!("The smallest i64 is {} and the biggest i64 is {}.", std::i64::MIN, std::i64::MAX);
    println!("The smallest u64 is {} and the biggest u64 is {}.", std::u64::MIN, std::u64::MAX);
    println!("The smallest i128 is {} and the biggest i128 is {}.", std::i128::MIN, std::i128::MAX);
    println!("The smallest u128 is {} and the biggest u128 is {}.", std::u128::MIN, std::u128::MAX);

}

Beginilah hasilnya:

The smallest i8 is -128 and the biggest i8 is 127.
The smallest u8 is 0 and the biggest u8 is 255.
The smallest i16 is -32768 and the biggest i16 is 32767.
The smallest u16 is 0 and the biggest u16 is 65535.
The smallest i32 is -2147483648 and the biggest i32 is 2147483647.
The smallest u32 is 0 and the biggest u32 is 4294967295.
The smallest i64 is -9223372036854775808 and the biggest i64 is 9223372036854775807.
The smallest u64 is 0 and the biggest u64 is 18446744073709551615.
The smallest i128 is -170141183460469231731687303715884105728 and the biggest i128 is 170141183460469231731687303715884105727.
The smallest u128 is 0 and the biggest u128 is 340282366920938463463374607431768211455.