Portal SAMP
[Tutorial] Functions - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Guias e Tutoriais (https://portalsamp.com/forumdisplay.php?fid=7)
+--- Tópico: [Tutorial] Functions (/showthread.php?tid=1562)



Functions - iacta - 26/08/2021

Olá pessoal, hoje trago um tutorial para vocês, sobre uso e declaração de functions(funções).

Vamos lá

Sumário

[b]{
1 - Para que elas servem?
[/b]
[b]2 - Tipos de declarações
3 - Explicação geral
[/b]
}



1 Para que elas servem?



Functions servem para facilitar, a programação e organização do script.



2 - Tipos de declarações

Aqui estão os tipos, de declarações de funções:

Código:
public e forward
myfunc(de modo geral)
stock


3 - Explicação geral

MyFunc()


Essa é a declaração padrão de uma função, usada para declarar o início de uma função.

Parâmetros, Declaração e Exemplos:





Código:
MyFunc //Este é o nome da sua função, isso fica a seu critério. () // Aqui ficam os parênteses onde ficaram os parâmetros da sua função, se não houver nenhum deixe em branco


MyFunc(){
   return 0; /*chave de retorno, o que a função irá retornar. Parametros: [
  0 => false(sempre que chamada, a função retornará, falso),
  1 => true(sempre que chamada, a função retornará, verdadeiro)
  args(nome da variável) => variável(sempre que chamada, a função retornará, uma variável dentro da função)
]*/

// OBS: caso não insira uma chave de retorno na sua function, ela retornará true(verdadeiro)
}


// Exemplo de uso


[color=#000000][size=small][font=Monaco, Consolas, Courier, monospace]MyFunc(){[/font][/size][/color]
[color=#000000][size=small][font=Monaco, Consolas, Courier, monospace]  printf("[/font][/size][/color][color=#000000][size=small][font=Monaco, Consolas, Courier, monospace]Olá Mundo!"[/font][/size][/color][color=#000000][size=small][font=Monaco, Consolas, Courier, monospace]); //Imprimimos no console a frase 'Olá Mundo!'[/font][/size][/color]
[color=#000000][size=small][font=Monaco, Consolas, Courier, monospace]  return true;[/font][/size][/color]
[color=#000000][size=small][font=Monaco, Consolas, Courier, monospace]}[/font][/size][/color]


main(){
   MyFunc(); // chamamos a minha function, quando eu rodar o meu script
}

//Manuseando Parâmetros

//Aviso sobre os parâmetros: Existe uma explicação bem profunda sobre como utiliza-los, mas irei somente explicar o básico!


MyFunc(var1, var2, message[20]) //parâmetros criados: var1 e var2(variável 1, variável 2) {
    printf(var1 + var2); //imprimimos no console a soma dos dois valores!
    printf(message);
}

main(){
  MyFunc(10, 20); //soma 10 mais 20, resultado: 30
}


forward


forward informa ao compilador que uma função virá mais tarde. É necessário para todas as funções públicas, mas pode ser usado em outros lugares. Seu uso é "encaminhar" seguido do nome completo e dos parâmetros da função que você deseja encaminhar, seguido por um ponto e vírgula:

Código:
forward myfunc();
public myfunc()

public


public é usado para tornar uma função visível para a Máquina Virtual, ou seja, permite que o servidor chame a função diretamente, em vez de apenas permitir que a função seja chamada de dentro do script.
 

(créditos: wiki-samp) Uma função public tem seu nome textual armazenado no arquivo amx, ao contrário das funções normais que têm seu endereço armazenado apenas para saltos, o que é outra desvantagem da descompilação. Isso permite que você chame a função por nome de fora do script e também permite que você chame funções por nome de dentro do script, saindo e inserindo-o novamente.

Parâmetros, Declaração e Exemplos:


Código:
forward myfunc();
public myfunc(){
  return 1;
}
main(){
MyFunc();
}
// seu uso não muda da declaração geral: MyFunc().




stock


stock é usado para declarar variáveis e funções que não podem ser usadas, mas para as quais você não deseja gerar avisos não usados. Com as variáveis stock é como const no sentido de que é um modificador, não uma declaração completa.

Se a variável ou função for usada, o compilador irá incluí-la; se não for usada, irá excluí-la. Isso é diferente de usar #pragma unused <symbol>, pois isso simplesmente suprimirá (ou seja, ocultará) o aviso e incluirá as informações de qualquer maneira, o stock ignorará totalmente os dados não utilizados.

(créditos: wiki-samp)o stock é mais comumente usado para bibliotecas personalizadas. Se você escreve uma biblioteca, fornece um monte de funções para outras pessoas usarem, mas não tem ideia se elas as usarão ou não. Se o seu código dá muitos avisos para cada função que uma pessoa não usa, as pessoas reclamarão (a menos que seja propositalmente, pois eles TÊM de usar essa função (por exemplo, para inicializar variáveis). Dito isso, no entanto, partindo da experiência pessoal com o pessoal da YSI reclamará de qualquer maneira.



Parâmetros, Declaração e Exemplos:


Código:
stock MyFunc(){
return 0;
} // seu uso não muda da declaração geral: MyFunc().

main(){
MyFunc();
}

Isso é tudo pessoal Big Grin

Espero ter ajudado!
Até a próxima

Qualquer sugestão será muito bem vinda
(
Se estiver faltando algo informe no tópico que eu irei editar, espero não ter esquecido nada)






RE: Functions - c4l1ral - 26/08/2021

belo tutorial
E uma coisa muito boa de se usar para otimizar é o


#define FS::%0(%1) forward %0(%1);\                   
public %0(%1)         

 ( Essa DEFINE já vai está definindo a PUBLIC & Forward )
( "FS::" caso queira substituir basta colocar exemplo "BPF::" )

Invés de você colocar

forward myfunc();
public myfunc(){

Você apenas coloca  (

FS:: myfunc() {


RE: Functions - ipsLuan - 27/08/2021

Tá faltando organização no tutorial.