Ôn tập: Điểm có thể in ra
Thuộc phần Lập trình hướng đối tượng trong hành trình Rust của Coddy. Bài học 39 trên 61.
Thử thách
DễHãy kết hợp tất cả các trait tiêu chuẩn bạn đã học bằng cách tạo một struct Point đầy đủ tính năng, có thể gỡ lỗi, hiển thị đẹp mắt và so sánh bằng nhau!
Bạn sẽ sắp xếp code trong hai tệp:
point.rs: Định nghĩa một structPointcông khai với các trườngxvàycông khai (cả hai đều lài32).Pointcần hỗ trợ ba khả năng:- In thông tin gỡ lỗi bằng
{:?}. Tự động dẫn xuất khả năng này - Hiển thị thân thiện với người dùng bằng
{}theo định dạng(x, y): tự triển khai khả năng này bằngstd::fmt::Display - So sánh bằng nhau bằng
==: dẫn xuấtPartialEq
- In thông tin gỡ lỗi bằng
main.rs: Đưa module point vào và tạo hai instancePointbằng các đầu vào đã cho. Minh họa cả ba khả năng bằng cách in điểm thứ nhất theo định dạng gỡ lỗi, in điểm thứ hai theo định dạng hiển thị và so sánh xem hai điểm có bằng nhau không.
Đầu ra của bạn cần thể hiện cả ba khả năng của trait:
Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}Ví dụ, với các đầu vào 3, 5, 3, 5:
Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: trueVà với các đầu vào 10, 20, 5, 15:
Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: falseBạn sẽ nhận bốn đầu vào: tọa độ x và y của điểm thứ nhất, sau đó là tọa độ x và y của điểm thứ hai. Hãy phân tích từng giá trị thành i32.
Tự làm thử
mod point;
use point::Point;
fn main() {
// Đọc bốn đầu vào: x1, y1, x2, y2
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x2: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y2: i32 = input.trim().parse().expect("Invalid input");
// TODO: Tạo hai instance Point từ các đầu vào
// TODO: In ra điểm thứ nhất theo định dạng gỡ lỗi {:?}
// Định dạng: "Debug: Point { x: ..., y: ... }"
// TODO: In ra điểm thứ hai theo định dạng hiển thị {}
// Định dạng: "Display: (..., ...)"
// TODO: So sánh hai điểm và in ra kết quả
// Định dạng: "Equal: true" hoặc "Equal: false"
}
Tất cả bài học trong Lập trình hướng đối tượng
1Phương thức và hành vi
Nhập môn khối triển khaiTham số selfPhương thức có thể thay đổiHàm liên kếtNhiều khối triển khaiNối chuỗi phương thứcÔn tập: thao tác với hình chữ nhật4Dự án: Thú cưng ảo
Định nghĩa thú cưngCho thú cưng ăn7Các trait tiêu chuẩn
Trait DebugTrait DisplayClone và CopyCác trait so sánh bằngÔn tập: Điểm có thể in ra2Tính đóng gói và module
Kiến thức cơ bản về moduleTừ khóa publicTrường riêng tưHàm lấy giá trịHàm thiết lập giá trịÔn tập: tủ khóa an toàn5Kiểu tổng quát
Cấu trúc tổng quátPhương thức tổng quátNhiều kiểu tổng quátHàm tổng quátÔn tập: điểm tọa độTự luyện tập: Trình biên dịch Rust online