Rust-데이터 유형

유형 시스템은 언어에서 지원하는 다양한 유형의 값을 나타냅니다. 유형 시스템은 프로그램에 의해 저장되거나 조작되기 전에 제공된 값의 유효성을 확인합니다. 이렇게하면 코드가 예상대로 작동합니다. Type System은 더욱 풍부한 코드 힌트와 자동화 된 문서화를 허용합니다.

Rust는 정적으로 형식화 된 언어입니다. Rust의 모든 값은 특정 데이터 유형입니다. 컴파일러는 할당 된 값을 기반으로 변수의 데이터 유형을 자동으로 추론 할 수 있습니다.

변수 선언

사용 let 변수를 선언하는 키워드입니다.

fn main() {
   let company_string = "TutorialsPoint";  // string type
   let rating_float = 4.5;                 // float type
   let is_growing_boolean = true;          // boolean type
   let icon_char = '♥';                    //unicode character type

   println!("company name is:{}",company_string);
   println!("company rating on 5 is:{}",rating_float);
   println!("company is growing :{}",is_growing_boolean);
   println!("company icon is:{}",icon_char);
}

위의 예에서 변수의 데이터 유형은 할당 된 값에서 추론됩니다. 예를 들어 Rust는 string 데이터 유형을 company_string 변수에 할당 하고 float 데이터 유형을 rating_float 등에 할당합니다 .

에 println! 매크로는 두 개의 인수를 취합니다-

  • 자리 표시자인 특수 구문 {}
  • 변수 이름 또는 상수

자리 표시자는 변수 값으로 대체됩니다.

위 코드 조각의 출력은 다음과 같습니다.

company name is: TutorialsPoint
company rating on 5 is:4.5
company is growing: true
company icon is: ♥

스칼라 유형

스칼라 유형은 단일 값을 나타냅니다. 예 : 10,3.14, 'c'. Rust에는 네 가지 기본 스칼라 유형이 있습니다.

  • Integer
  • Floating-point
  • Booleans
  • Characters

이후 섹션에서 각 유형에 대해 배웁니다.

정수

정수는 분수 구성 요소가없는 숫자입니다. 간단히 말해 정수 데이터 유형은 정수를 나타내는 데 사용됩니다.

정수는 부호 있음과 부호 없음으로 더 분류 될 수 있습니다. 부호있는 정수는 음수와 양수 값을 모두 저장할 수 있습니다. 부호없는 정수는 양수 값만 저장할 수 있습니다. 정수 유형이 아래에 주어지면 자세한 설명-

Sr. 아니. 크기 서명 됨 서명되지 않음
1 8 비트 i8 u8
2 16 비트 i16 u16
32 비트 i32 u32
4 64 비트 i64 u64
5 128 비트 i128 u128
6 아치 Isize 사용하다

정수의 크기는 arch 가 될 수 있습니다 . 이는 데이터 유형의 크기가 머신 의 아키텍처 에서 파생된다는 것을 의미합니다 . 크기가 arch 인 정수 는 x86 시스템에서 32 비트, x64 시스템에서 64 비트입니다. 아치 정수는 주로 일종의 컬렉션을 인덱싱 할 때 사용됩니다.

삽화

fn main() {
   let result = 10;    // i32 by default
   let age:u32 = 20;
   let sum:i32 = 5-15;
   let mark:isize = 10;
   let count:usize = 30;
   println!("result value is {}",result);
   println!("sum is {} and age is {}",sum,age);
   println!("mark is {} and count is {}",mark,count);
}

출력은 다음과 같습니다.

result value is 10
sum is -10 and age is 20
mark is 10 and count is 30

위 코드는 age 값을 부동 소수점 값으로 바꾸면 컴파일 오류를 반환 합니다.

정수 범위

각 부호있는 변형은 -(2 ^ (n-1)에서 2 ^ (n-1) -1 까지의 숫자를 저장할 수 있습니다. 여기서 n은 변형이 사용하는 비트 수입니다. 예를 들어 i8은 -(2 ^의 숫자를 저장할 수 있습니다. 7) ~ 2 ^ 7 -1 − 여기서 n 을 8 로 대체했습니다 .

부호없는 각 변형은 0 에서 (2 ^ n) -1 까지의 숫자를 저장할 수 있습니다 . 예를 들어 u8은 0 에서 2 ^ 7 까지의 숫자를 저장할 수 있으며 이는 0에서 255와 같습니다.

정수 오버플로

정수 변수에 할당 된 값이 데이터 유형에 대해 Rust가 정의한 범위를 초과하면 정수 오버플로가 발생합니다. 예를 들어 이것을 이해합시다.

fn main() {
   let age:u8 = 255;

   // 0 to 255 only allowed for u8
   let weight:u8 = 256;   //overflow value is 0
   let height:u8 = 257;   //overflow value is 1
   let score:u8 = 258;    //overflow value is 2

   println!("age is {} ",age);
   println!("weight is {}",weight);
   println!("height is {}",height);
   println!("score is {}",score);
}

부호없는 u8 변수의 유효한 범위는 0에서 255까지입니다. 위의 예에서 변수에는 255보다 큰 값이 할당됩니다 (Rust의 정수 변수에 대한 상한값). 실행시 위의 코드는 경고를 반환합니다.warning − literal out of range for u8체중, 키, 점수 변수 255 이후의 오버플로 값은 0, 1, 2 등에서 시작됩니다. 경고없는 최종 출력은 다음과 같습니다.

age is 255
weight is 0
height is 1
score is 2

흙손

Rust의 Float 데이터 유형은 다음과 같이 분류 할 수 있습니다. f32f64. f32 유형은 단 정밀도 부동이고 f64는 배정 밀도입니다. 기본 유형은 f64입니다. float 데이터 유형에 대해 더 많이 이해하려면 다음 예제를 고려하십시오.

fn main() {
   let result = 10.00;        //f64 by default
   let interest:f32 = 8.35;
   let cost:f64 = 15000.600;  //double precision
   
   println!("result value is {}",result);
   println!("interest is {}",interest);
   println!("cost is {}",cost);
}

출력은 다음과 같습니다.

interest is 8.35
cost is 15000.6

자동 유형 주조

Rust에서는 자동 유형 캐스팅이 허용되지 않습니다. 다음 코드 스 니펫을 고려하십시오. float 변수에 정수 값이 할당됩니다.interest.

fn main() {
   let interest:f32 = 8;   // integer assigned to float variable
   println!("interest is {}",interest);
}

컴파일러는 mismatched types error 아래와 같이.

error[E0308]: mismatched types
   --> main.rs:2:22
   |
 2 | let interest:f32=8;
   |    ^ expected f32, found integral variable
   |
   = note: expected type `f32`
      found type `{integer}`
error: aborting due to previous error(s)

숫자 구분자

큰 숫자의 가독성을 높이기 위해 시각적 구분 기호 _ 밑줄을 사용하여 숫자를 구분할 수 있습니다. 즉, 50,000은 50_000으로 쓸 수 있습니다. 이는 아래 예에 나와 있습니다.

fn main() {
   let float_with_separator = 11_000.555_001;
   println!("float value {}",float_with_separator);
   
   let int_with_separator = 50_000;
   println!("int value {}",int_with_separator);
}

출력은 다음과 같습니다.

float value 11000.555001
int value 50000

부울

부울 유형에는 true 또는 false의 두 가지 가능한 값이 있습니다. 사용bool 부울 변수를 선언하는 키워드입니다.

삽화

fn main() {
   let isfun:bool = true;
   println!("Is Rust Programming Fun ? {}",isfun);
}

위 코드의 출력은 다음과 같습니다.

Is Rust Programming Fun ? true

캐릭터

Rust의 문자 데이터 유형은 숫자, 알파벳, 유니 코드 및 특수 문자를 지원합니다. 사용char문자 데이터 유형의 변수를 선언하는 키워드입니다. Rust의 char 유형은 유니 코드 스칼라 값을 나타내며, 이는 ASCII 이상을 나타낼 수 있음을 의미합니다. 유니 코드 스칼라 값 범위U+0000 ...에 U+D7FFU+E000 ...에 U+10FFFF 포함한.

Character 데이터 유형에 대해 더 많이 이해하는 예를 고려해 보겠습니다.

fn main() {
   let special_character = '@'; //default
   let alphabet:char = 'A';
   let emoji:char = '';
   
   println!("special character is {}",special_character);
   println!("alphabet is {}",alphabet);
   println!("emoji is {}",emoji);
}

위 코드의 출력은 다음과 같습니다.

special character is @
alphabet is A
emoji is