Métodos com perâmetros

Você não está cansado de escrever o mesmo código várias vezes para se mover uma certa quantidade de passos? Por outro lado, escrever avançar2(), avançar3(), avançar4(), assim como recuar2(), recuar3(), recuar4() e etc também não ajudam, para dizer o mínimo.

Felizmente, é possível passar parâmetros para seus métodos. Você tem que especificar o tipo e nome entre parêntesis depois do nome do método. Então, você pode usá-los no corpo do método como se eles fossem variáveis definidas lá, e com valores iniciais que o "caller" especificou.

[!java|c]double [/!]dividirPorDois([!java|c]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala|c]{[/!][!python]:[/!]
     return x / 2[!java|c];[/!]
[!scala|java|c]}[/!]

Como o "caller", você deve especificar o valor inicial destas "variáveis" entre parêntesis na chamada.

[!java|c]double [/!][!scala]val [/!]result = dividirPorDois(3.14)[!java|c];[/!]

Se você quiser vários parâmetros, você precisa separar eles com vírgulas (,) tanto na declaração quanto na chamada.

[!java|c]double dividir(double x, double y) {[/!]
[!scala]def dividir(x:Double, y:Double): Double = {[/!]
[!python]def dividir(x, y):[/!]
     return x / y[!java|c];[/!]
[!java|scala|c]}[/!]
[!java|c]double res = dividir(3.14 , 1.5);[/!]
[!scala]val res = dividir(3.14 , 1.5)[/!]
[!python]res = dividir(3.14 , 1.5)[/!]
[!java|scala]

Em [!thelang], você pode declarar vários métodos de mesmo nome desde que eles não tenham a mesma assinatura, ou seja, a mesma quantidade e tipo de parâmetros.

[!java]double max(double x, double y)[/!][!scala]def max(x:Double, y:Double): Double =[/!] {
  if (x > y) {
    return x;
  }
  return y;
}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, y:Int): Int =[/!] {
  if (x > y) {
    return x;
  }
  return y;
}
[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, y:Int, z:Int): Int =[/!] {
  if (x > y && x > z) {
    return x;
  }
  if (y > z) {
    return y;
  }
  return z;
}

Observe que nós omitimos os ramos else de cada if. Isto funciona de qualquer jeito por que um return interrompe a execução do método. Se nós chegarmos à última linha de [!java]max(int,int)[/!][!scala]max(Int,Int):Int[/!], vamos saber que x<=y por que de outra forma, o return da linha 2 deveria ter parado a execução.

[/!]

Objetivo do exercício

Agora você vai ter que escrever um método [!java|c]mover(int contaPassos,[!java]boolean[/!][!c]int[/!] forward)[/!] [!scala]mover(contaPassos: Int,forward: Boolean)[/!] [!python]mover(contaPassos,forward)[/!] que move para a frente contaPassos passos se forward for verdadeiro, e move para trás a mesmas quantidade de passos se o booleano for falso.

Desta vez existe apenas um mundo mas sete buggles, todos compartilhando o mesmo código. Este código não deve te dar muito trabalho para escrever, na verdade.