mishalhaneef
mishalhaneef

Reputation: 852

How to return two value from a function in dart?

here is my code

import 'dart:io';
import 'dart:math';

void main() {
  bool flag = false;
  for (int i = 0; i < 100; i++) {
    gameCode();
    if (userNumber == computerNumber) {
      flag = true;
      break;
    }

  }
}

int randomNumber(number) {
  Random randNumber = Random();
  int random = randNumber.nextInt(number);
  return random;
}

gameCode() {
  int computerNumber = randomNumber(9);
  print("start guessing the number : ");
  int userNumber = int.parse(stdin.readLineSync()!);
  if (userNumber == computerNumber) {
    print("You got it");
  }
}

in this code you can see gameCode function. in that function there is two value that i need to use in main function.so how do i return those two keyword from that function ?

//userNumber // computerNumber

this is the variable that i want to return from that code

Upvotes: 0

Views: 2693

Answers (6)

cryosx
cryosx

Reputation: 51

you can do it with records now, it should allow you to send typed properties. This example will return a record with named fields.

({int computerNumber, int userNumber}) gameCode() {
  ...
  return (computerNumber: computerNumber, userNumber: userNumber);
}

and to deconstruct named fields you do the colon variable

main() {
  final (:computerNumber, :userNumber) = gameCode();
}
   

Upvotes: 1

Drogbut
Drogbut

Reputation: 37

With the Latest Dart: 3.0.0 version you can pass more than one value from function using Records

import 'dart:io';
import 'dart:math';
    
import 'dart:math';

void main() {
  bool flag = false;
  for (int i = 0; i < 100; i++) {
    var value = gameCode();
    if (value.$1 == value.$2) {
      flag = true;
      break;
    }
  }
  print("The flag is : $flag");
}

int randomNumber(number) {
  Random randNumber = Random();
  int random = randNumber.nextInt(number);
  return random;
}

(int, int) gameCode() {
  int computerNumber = randomNumber(9);
  print("start guessing the computer number : $computerNumber");
  int userNumber = int.parse(stdin.readLineSync()!);
  print("start guessing the user number : $userNumber");
  if (userNumber == computerNumber) {
    print("You got it");
  }
  
  return (computerNumber, userNumber);
}

Upvotes: 1

MSARKrish
MSARKrish

Reputation: 4094

With the Latest Dart: 3.0.0 version you can pass more than one value from function using Records

(int, int) gameCode() {
  int computerNumber = randomNumber(9);
  int userNumber = int.parse(stdin.readLineSync()!);
  return (computerNumber,userNumber);
}


var result=gameCode();
print(result.$1);
print(result.$2);

Upvotes: 1

julemand101
julemand101

Reputation: 31199

Dart does not support returning multiple values in the current latest version. I would in your case recommend creating a class for the specific purpose of define the result from gameCode(). So something like this:

class GameCodeResult {
  int userNumber;
  int computerNumber;

  GameCodeResult({
    required this.userNumber,
    required this.computerNumber,
  });
}

Which we can then use like this in your program:

import 'dart:io';
import 'dart:math';

void main() {
  bool flag = false;
  for (int i = 0; i < 100; i++) {
    GameCodeResult result = gameCode();
    if (result.userNumber == result.computerNumber) {
      flag = true;
      break;
    }
  }
}

final _random = Random();
int randomNumber(int maxNumber) => _random.nextInt(maxNumber);

GameCodeResult gameCode() {
  int computerNumber = randomNumber(9);
  print("start guessing the number : ");
  int userNumber = int.parse(stdin.readLineSync()!);

  if (userNumber == computerNumber) {
    print("You got it");
  }

  return GameCodeResult(userNumber: userNumber, computerNumber: computerNumber);
}

Note, I also fixed your randomNumber() method since it is not recommended to generate a new Random() object for each new random number you want. We should instead reuse an instance of Random in our program.

Upvotes: 3

Tejaswini Dev
Tejaswini Dev

Reputation: 1469

Please refer to below code

import 'dart:io';
import 'dart:math';

void main() {
  bool flag = false;
  for (int i = 0; i < 100; i++) {
   Map<String, dynamic> res = gameCode();
    print(res);
    if (res['user_number'] == res['computer_number']) {
      flag = true;
      break;
    }

  }
}

int randomNumber(number) {
  Random randNumber = Random();
  int random = randNumber.nextInt(number);
  return random;
}

Map<String, dynamic> gameCode() {
  int computerNumber = randomNumber(9);
  print("start guessing the number : ");
  int userNumber = 
    int.parse(stdin.readLineSync()!);
  if (userNumber == computerNumber) {
    print("You got it");
  }
  return {
    "computer_number": computerNumber,
    "user_number": userNumber,
  };
}


Upvotes: 1

MurphLu
MurphLu

Reputation: 51

Dart not support return multiple values in function, you can return it with array, map, or you can use third lib tuple

Upvotes: 3

Related Questions