スライス:ポインターと長さの組み合わせ
配列の一部を参照します。
「スライス:ポインターと長さの組み合わせ」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
スライスが存在する理由
配列の長さは固定ですが、関数では任意の長さを扱いたいことがよくあります。スライスなら、要素の柔軟な範囲を表せるため、この問題を解決できます。🔪
2つのデータ
スライスは、実際には2つのものをまとめたものです。先頭要素へのポインターと、それに続く要素数を表す長さです。
スライスの型
スライスの型は、空の角括弧と要素の型を使って[]Tと記述します。[]i32は符号付き整数のスライスを意味します。
var view: []i32 = undefined;スライスは所有せず借用する
スライスはメモリを所有せず、通常は配列など別のもののビューを借用します。基になるデータは、スライスより長く存続しなければなりません。
長さは実行時に決まる
配列とは異なり、スライスのlenは実行時の値です。これにより、1つのスライス型でさまざまなサイズを扱えます。
const n = view.len;配列からスライスへ
[0..]を使うと、配列全体をスライスとして取得できます。これはインデックス0から末尾までという意味です。スライスはその配列を指すようになります。
var data = [_]i32{ 5, 6, 7 };
const s = data[0..];スライスのインデックス指定
配列と同じように角括弧を使って、スライスの要素を読み取れます。保存されたポインターにインデックスを加えて、値を見つけます。
const middle = s[1];読み取り専用スライス
[]const u8は読み取り専用のスライスです。constによって、借用したデータが誤って変更されるのを防ぎます。
const msg: []const u8 = "hi";スライスの受け渡しは低コスト
スライスを関数に渡してもコピーされるのはポインターと長さだけで、要素はコピーされません。大きなバッファーも追加コストなしで渡せます。
fn sum(items: []const i32) i32 {
// walk items here
}スライスも範囲チェックされる
スライスは長さを保持しているため、インデックス操作もチェックされます。len を超えると、安全なビルドでは安全機構によるパニックが発生します。
空のスライスも有効です
スライスには要素を 0 個格納できます。空のスライスは単に len が 0 に等しいだけで、通常どおり受け渡しできます。
const nothing: []const i32 = &[_]i32{};確認問題
固定長配列と比べて、スライスが実際に格納しているものについて考えてみてください。どの組み合わせが正しいでしょうか。
まとめ
スライスは、既存データへのビューを借用するポインターと長さの組み合わせです。境界チェックが維持され、参照によって低コストに受け渡せます。🎯
AI チューターと学ぶ Zig — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「スライス:ポインターと長さの組み合わせ」レッスンは無料ですか?
はい。「スライス:ポインターと長さの組み合わせ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「スライス:ポインターと長さの組み合わせ」で何を学びますか?
配列の一部を参照します。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「スライス:ポインターと長さの組み合わせ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 固定長配列
- スライス:ポインターと長さの組み合わせ
- array[start..end]でスライスする
- スライスを反復処理して変更する