gokayburuc

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.

pub struct Circle {
  pub radius: f64,
}
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)

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);
}

#rust