2012年3月1日木曜日

Dartにおける剰余(モジュロ)

このエントリーをはてなブックマークに追加
Dart言語では剰余(除算の余り)は % 演算子で計算できます。
main() {
  print('3 % 2 = ${3 % 2}'); // 3 % 2 = 1
}
これは問題ないと思いますが、負の値を与えたときには注意が必要です。Dartでは剰余の計算結果における符号は、常に正となります。サンプルコード
main() {
  print(' 3 %  2 = ${ 3 %  2}'); //  3 %  2 = 1
  print('-3 %  2 = ${-3 %  2}'); // -3 %  2 = 1
  print(' 3 % -2 = ${ 3 % -2}'); //  3 % -2 = 1
  print('-3 % -2 = ${-3 % -2}'); // -3 % -2 = 1
}
これはC/C++やJava、Ruby、Pyhtonなどと異なる動作です。たとえばJavaでは、剰余の符号は割られる数(被除数)の符号と一致します。他の言語の感覚で扱ってしまうと思わぬ動作にはまってしまうかもしれませんので注意してください。

とはいえ、ここで例にあげた言語だけでも剰余の符号の扱いはそれぞれ異なりますので、どの言語で書く場合でも剰余の扱いは注意が必要なポイントです。

この動作は実際のDart VMで確認したものです。確認できた限りではDart言語仕様で触れられてない内容ですので、今後変更になるかもしれません。

0 件のコメント:

コメントを投稿