範囲(コンピュータプログラミング)

コンピュータ サイエンスでは、「範囲」という用語は次の 3 つのいずれかを指します。

  1. 変数に格納できる可能性のある値。
  2. 配列の上限と下限。
  3. iteratorの代替。

変数の範囲

変数の値域は、その変数が保持できる値の集合として定義されます。整数の場合、変数の定義は整数のみに制限され、その範囲は範囲内のすべての数値(最大値と最小値を含む)をカバーします。例えば、符号付き16ビット整数変数の値域は、-32,768から+32,767までのすべての整数です。

配列の範囲

配列が数値インデックスで指定されている場合、その範囲は配列の上限と下限になります。環境によっては、プログラムが範囲外の配列要素にアクセスしようとすると、警告、致命的な例外、または予期しない動作が発生することがあります。C などの一部のプログラミング言語では配列下限は固定されており(ゼロ)、上限までの各位置にデータが格納されます(つまり、要素が 5 つある配列の範囲は 0 から 4 になります)。PHP などの他のプログラミング言語では配列に要素が定義されていない部分がある場合があり、そのため範囲が 0 から 4 の配列には最大5 つの要素(最小 2 つ)が含まれます。

イテレータの代替としての範囲

コンピュータサイエンスにおけるrangeの別の意味は、 iteratorの代替です。この意味で使われる場合、range は「begin/end イテレータのペアをまとめてパックしたもの」と定義されます。[ 1 ] 「範囲は(イテレータと比較して)優れた抽象化である」という主張があります。これには安全性の向上など、いくつかの理由があります。 [ 1 ]

特に、このような範囲はC++20[ 2 ] Boost C++ライブラリ[ 3 ]およびD標準ライブラリでサポートされています。[ 4 ]

データ型としての範囲

範囲を表す汎用クラスで、開始プロパティと終了プロパティが含まれます。

範囲のデータ型はジェネリックを使用して実装できます。

C#の例。

パブリックレコードRange < T > ( T Start T End ) 、ここでT : IComparable ;

Kotlinの例。

データクラスRange < T : Comparable < T >> ( val start : T , val end : T )

PHPの例。

読み取り専用クラスRange < T > { public関数__construct ( public T $start , public T $end , ) {} }

Pythonの例。

データクラスからデータクラスをインポート@dataclassクラス範囲[ T ]:開始: T終了: T

Rustには標準ライブラリに組み込みの範囲構造体がありますstd::ops::Range[ 5 ] C++std::rangesにもC++20以降にライブラリがあります。[ 6 ]

演算子としての範囲

Rustには..演算子と..=演算子があります。

let heartwarming = "heartwarming!" .to_string ( ); let warm = & heartwarming [ 5 .. 9 ];

Zigには..演算子もあります。

// 連続する整数を反復処理するには、範囲構文を使用します。var sum : usize = 0 ; for ( 0 .. 5 ) | i | { sum += i ; }

C#も同様である[ 7 ]

文字列[] items = [ "1" , "2" , "3" , "4" ];文字列[] firstThreeItems = items [ 0 . .2 ];

F#[ 8 ]

[ 1 .. 4 ] // 出力: [1; 2; 3; 4]

コトリン[ 9 ]

for ( i in 1. . 5 ) print ( i )

およびPerl[ 10 ]

( 1 .. 5 )の場合{印刷}

PythonPHPには範囲演算子はありませんが、range関数はあります。[ 11 ] [ 12 ]

参照

参考文献

  1. ^ a b Andrei Alexandrescu (2009年5月6日). 「Iterators Must Go」(PDF) . BoostCon 2009. 2014年7月29日閲覧
  2. ^ cppreference
  3. ^ Boost.Range ドキュメント
  4. ^ D Phobos ランタイムライブラリ std.range モジュール
  5. ^ 「Range in std::ops - Rust」 . doc.rust-lang.org . 2024年10月17日閲覧
  6. ^ 「Rangesライブラリ(C++20以降)」 cppreference.com . 2024年9月11日閲覧
  7. ^ BillWagner (2023年11月14日). 「インデックスと範囲を使用してデータの範囲を調べる - C#」 . learn.microsoft.com . 2025年2月22日閲覧
  8. ^ 「範囲演算子」 . F# by example . 2023年2月17日. 2025年2月22日閲覧
  9. ^ 「範囲と進行 - Kotlin」 . Kotlinヘルプ. 2025年2月22日閲覧
  10. ^ "perlop - Perl式:演算子、優先順位、文字列リテラル - Perldocブラウザ" . perldoc.perl.org . 2025年2月22日閲覧
  11. ^ 「組み込み関数」 . Pythonドキュメント. Pythonソフトウェア財団. 2024年12月17日閲覧
  12. ^ 「PHP: range - マニュアル」 . PHPドキュメンテーショングループ. 2024年12月17日閲覧