変数でも「不変」がデフォルト――Rustの変数、データ型を理解する:基本からしっかり学ぶRust入門(2)(1/3 ページ)
Rustについて基本からしっかり学んでいく本連載。第2回は、Rustにおける変数、データ型、配列について。
Rustについて基本からしっかり学んでいく本連載。連載第2回は、主にC/C++言語の経験者を意識しながら、基本的な文法(変数、データ型、配列など)について、Rustではどう書くかという観点で紹介します。
サンプルパッケージについて
本連載ではサンプルコードを紹介して、必要に応じてコンパイルと実行まで行っていきます。サンプルコードはGitHubで公開しており、こちらから自由にダウンロードして使えるようにします。利便性を考えてサンプルコードはパッケージの形でまとめています。必要な人は、パッケージをまとめたzipファイルをダウンロードして、お手元のPCの適当なフォルダ(前回の記事で紹介したatmarkit_rustなど)に展開すれば、すぐにサンプルコードを参照/実行できます(具体的な方法は連載第1回の記事を参照してください)。
詳しくはプロジェクト管理の回で取り上げますが、パッケージには「クレート」と呼ばれるバイナリあるいはライブラリを含むことができるようになっています。このうち、バイナリのクレートは複数を含めることができるので、パッケージ内の各サンプルはそれぞれ異なるクレートとしています。
第1回で紹介したフォルダ構成とは若干異なりますので、注意してください。パッケージに複数のクレートを含める場合、ソースファイルの置き場所はsrc/binになり、src/main.rsは使われなくなります。例えば、sample1とsample2という2つのクレートが用意される場合、src/bin/sample1.rsとsrc/bin/sample2.rsというようにソースファイルを配置します。
そして、これらを実行するときには、以下のようにクレートを--binオプションで明示します。指定しない場合、「デフォルトのクレートが指定されていない」というエラーになります。
% cargo run --bin sample1
バイナリがtarget/debugに置かれるのは変わりません。同じ場所に、sample1、sample2が置かれます(Windowsの場合はsample1.exe, sample2.exe)。まとめると、以下のような構造になります。
package_name―+―src―bin―+―sample1.rs | +―sample2.rs +―target―debug―+―sample1(.exe) +―sample2(.exe)
ソースファイルを閲覧・編集する、バイナリを直接実行するときの参考にしてください。
コメント
Rustにおけるコメントは2種類あります。ひとつはCでおなじみの「/*〜*/」の形式、もうひとつがC++/Javaなどで使える2連スラッシュ(//)形式です。
前者は、/*から*/の範囲がコメントになります。複数行にまたがっていても、行の途中から始めて行の途中で終わっても構いません。関数の前で仕様を書いたり、ソースコードの先頭で作者や日付、バージョンを記したりするのに用いられます。
/* 作者:WINGSプロジェクト 日付:2021/9/1 バージョン:1.00 */
後者は、//から始まって、行末までコメントになります。行の途中から始めても構いません。文に対する説明などに用いられます。
// 処理の開始 println!("Hello, world!"); // "Hello, world!"と表示
コメントには、このようなメモ的な用途と、ドキュメンテーションコメントというHTMLドキュメントの生成の用途があります。ドキュメンテーションコメントは本連載では取り上げません。
変数
続いては変数を説明します。変数は制御構造とともに、プログラミング言語に欠かせない要素です。
変数の宣言
Rustは静的に型付けをするプログラミング言語なので、変数を事前に宣言する必要があります。変数は、以下のように「let文」で宣言します。変数の宣言は、関数の内部、外部、ブロックの内部など、基本的にどこでもできるようになっています。
let x = 100;
これで、変数xを宣言し、値として100を入れるという意味になります。なお、Rustでは「値100をxに拘束する」と表現します。
変数のデータ型を示すものが見当たりませんが、問題ありません。Rustには「型推論」という仕組みがあり、型が省略された場合に推測するようになっています。この例では、初期化する値の100を整数と見なして、xは整数型であると推測しています(整数型にも何種類かあります。詳しくは後述します)。
Copyright © ITmedia, Inc. All Rights Reserved.