Struct Yapılarının Rust İçinde Kullanım Alanları
In the Global Scope ( Module Level)
Bir modülün en üst düzeyinde (örneğin, main.rs veya lib.rs veya herhangi bir başka modül dosyasında) bir yapı tanımlayabilirsiniz.
// In main.rs or lib.rs
struct Point {
x: i32,
y: i32,
}
fn main() {
let p = Point { x: 10, y: 20 };
println!("Point: ({}, {})", p.x, p.y);
}
Inside a Module
Yapılar, bir mod bloğunun içinde, aynı dosyada veya modül olarak dahil edilen ayrı bir dosyada tanımlanabilir.
mod shapes {
pub struct Rectangle{
pub width: u32,
pub height: u32,
}
}
fn main() {
let rect = shapes::Reactangle {width: 30, height: 50};
println!("Reactangle: {}x{}", rect.width, rec.height);
}
Inside a Function (Local Scope)
Bir fonksiyonun içinde bir yapı tanımlayabilirsiniz, ancak bu nadirdir ve yapı yalnızca yerel olarak gerekli olmadıkça genellikle önerilmez.
fn create_point() {
struct LocalPoint {
x: i32,
y: i32,
}
}
let p = LocalPoint{x:5, y:10};
println!("LocalPoint: ({}, {})", p.x, p.y);
fn main() {
create_point();
}
Inside and impl Block ( Associated Structs)
Bir başka tür için impl bloğu içinde bir yapı tanımlayabilirsiniz, ancak bu yaygın değildir. Genellikle impl blokları, mevcut yapılar için yöntemler tanımlamak için kullanılır.
In a Separate File (Module File)
Projeniz büyükse, yapıları ayrı dosyalarda tanımlayabilir ve bunları mod kullanarak modül olarak dahil edebilirsiniz.
shape.rsisimli bir dosya:
pub struct Circle {
pub radius: f64,
}
main.rsisimli ana dosya:
mod shapes;
fn main() {
let circle = shapes::Circle{radius: 5.0};
println!("Circle Radius: {}", circle.radius);
}
As A Tuple Struct
Yapılar, adlandırılmış alanları olmayan yapılar olan demet yapıları olarak da tanımlanabilir.
struct Color(u8,u8,u8);
fn main() {
let red = Color(255,0,0);
println!("Red: ({}, {}, {})", red.0, red.1, red.2);
}
As a Unit Struct
Alan içermeyen bir yapı, genellikle belirteçler veya özellikler için kullanılır.
struct Empty;
fn main() {
let e = Empty;
}
Anahtar Notlar ( Key Facts and Notes)
- Bir yapıyı modülünün dışından erişilebilir kılmak için
pubişlevini kullanın. - Yapıların ömür süreleri lifetimes, genel özellikleri generics ve bunlarla ilişkili nitelikleri traits olabilir.
- Yapılar (structs) genellikle metot tanımlamak method için
implbloklarıyla birlikte kullanılır.
Structs With Generics and Lifetimes
struct Book<'a> {
title: &'a str,
author: &'a str,
pages: u32,
}
fn main() {
let book = Book {
title: "The Rust Programming Language",
author: "Steve Klabnik and Carol Nichols",
pages: 500,
};
println!("Book: {} by {}", book.title, book.author);
}