## 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.