LoginSignup
0
0

More than 3 years have passed since last update.

Dartはインデックスに負の数を指定することができない

Posted at

はじめに

Flutterでアプリを作っていた時、Dartの文法について調べて知ったことを書いておきます。

僕の思い込み

アプリの仕様で文字列の最後の文字を取得する必要があり、何も考えずにstr[-1]としたところ、エラー画面が出てコンソールには以下のように出力されました。

Uncaught exception:
RangeError (index): Index out of range: index must not be negative: -1
Dart 「-1はインデックスの範囲外だよ。それにインデックスに負の数は指定しないでね。」

僕がさわったことのある他の言語ではできたので、どの言語でもできるもんだと思っていました。

少し調べただけでも、

  • C
  • C++
  • Java
  • PHP
  • JavaScript

では0以上を指定する必要があるんですね。マイナスでもいい言語の方がマイナーなんですかね?

公式ドキュメントによると

List<String> languages = ['English', 'Spanish' ,'Chinese', 'Japanese'];
String country = 'Japan';

// Listの場合
print(languages[-1]); // エラーが出る
print(languages.last); // Japanese と出力される
print(languages[languages.length - 1]); // Japanese と出力される

// Stringの場合
print(country[-1]); // エラーが出る
print(country.last); // エラーが出る
print(country[country.length - 1]); // n と出力される
  1. 最後の要素を取得したいのであれば、配列ならlastというListクラスのプロパティを使うことができます。Stringでは使えません。
  2. 「最後から2番目」のように最後から数えた位置にある要素を取得したい場合は、languages.length - 2のように配列に含まれる要素の数から「〇番目」の数だけ引いてやればインデックスを求められます。これはListとStringのどちらでも使えます。

注意点

  • どちらの場合も要素が1つ以上存在する必要があります。
  • 2の方法では、要素数から引いた後の数がマイナスになってしまうと、マイナスの数を指定したのと同じことですからエラーが出ます。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0