Fonksiyonlar Ve Döngüler

Konu

#1
                                                        FONKSİYONLAR

    Bir önceki derste fonksiyonların ne olduğunu anlatmıştım. Eğer o dersi okumadaysanız Ders 1 linkine tıklayarak ulaşabilirsiniz.Şimdi yapacağımız kendi fonsiyonlarımızı nasıl kurabiliceğimizi göstereceğim.

    Şimdi elimizdeki bir derece cinsinden açıyı bir grada dönüşütüren bir fonksiyon yazalım.Fonksiyonun döneceği değeri float ( integerde olabilir ama açılarda float almak daha ksin sonuç verir.) cinsinden olacağı için fonsiyon şu şeklide başlıyacak.

float DegreeToGrad( float degree )
{
   
}
    Fonksiyonumuzu oluşturduk.Şimdi bir grad değeri veren bir değişken yaratalım.Sonra degree parametresini kullanarak gradı bulalım.

float DegreeToGrad( float degree )
{
      float grad =  ( degree * 10.0  ) / 9.0
}
    Şeklinde grad değerini bulduk.Son yapacağmız işlem ise fonksiyonu bu değere döndürmesini sağlamaktır.

float DegreeToGrad( floar degree )
{
      float grad = ( degree * 10.0 ) / 9.0
      return grad
}
     Şimdi oluşturduğumuz fonksiyonu nasıl kullanacağımıza dair bir örnek plugin yazalım.Konsolo sm_degree diye bir konsol komudu oluşturup bu fonksiyonu kullanalım.

PHP Kod:
#include < sourcemod >

public Plugin myinfo =
{
 name "Functions",
 author "Anil Can",
 description "Sample of Functions",
 version "1.0.0",
 url "https://forum.webdiyo.com"
}
public 
void OnPluginStart( )
{


     
      Bu yapıyı bir önceki derste anlamıştım.Anlamayanlar bir öncekir derse bakabilir.Şimdi konsol komudu eklemek için RegConsoleCmd komudunu kullanacağız.


PHP Kod:
public void OnPluginStart( )
{
 RegConsoleCmd"sm_degree"CommandDegree );

    Şimdi bu komut 1.6 register_clcmd ye göre daha gelişmiştir.Bu komudu konsola direk sm_degree ile çalışmakla beraber chata !degree /degree ile çalışmaktadır.Yani ilave bir chat komudu eklemenize gerek yoktur.Kullanıcı sm_degree komudunu çalıştırdığında CommandDegree publicini çalıştıracak.

PHP Kod:
public Action TestFloatint clientint args )
{


    
      İlk parametre kullanıcının indexi ikinci parametre ise sm_degree komudundan sonraki kaç adet terim kullanıldığına döner.Örnek vermek gerekirse kullanıcı sm_degree ali 23 webdiyo diyo bir komud girerse args değeri 3'e eşit olacaktır.Şimdi kullanıcı eğer eksik veya fazla parametre girerse eklentiyi durdurup kullanıcıya hata mesajı verelim.

PHP Kod:
public Action TestFloatint clientint args )
{
 ifargs != )
 {
 ReplyToCommandclient"Eksik veya fazla terim yazdiniz" );
 return Plugin_Handled;
 }

Şimdi Plugin_Handled plugini durdurmamızı sağlar ve kodun ileriye gitmesini engeller.4 çeşit return değerimiz vardır.

     Plugin_Continue   Çağrıyı durdurur ama plugini çalışması devam eder.
     Plugin_Changed    Koddaki girdi veya çıktı değerleri yeniden değer vermenizi sağlar.
     Plugin_Handled     Çağrıyı durdurur hem de plugin çalışması durdurur.
     Plugin_Stop           Plugin_Handled farkı ilerideki komutları da durdurmanızı sağlar.

    Kullanıcının yazdığı değeri bir değişkene kaydedelim.Kullanıcının yazdığırı değeri almak için GetCmdArg komudunu kullanacağız.

PHP Kod:
public Action CommandDegreeint clientint args )
{
 if( 
args != )
 {
 
ReplyToCommandclient"Eksik veya fazla terim yazdiniz" );
 return 
Plugin_Handled;
 }
 
char arg32 ];
 
GetCmdArg1argsizeofarg ) )

    
     Şimdi komuttaki ilk paramtere kaçıncı argümanı aldığımızı belirler.Örnek verelim ss_heal nick 100 diye bir komut girildi.Eğer ilk parametreyi 2 olarak girersek 100 argümanı alıcaktır.2.parametre argümanın depolanacağı değişken, 3. parametre ise argümanın uzunluğu hesaplar.Not bu komut argümanı otomatik string olarak alır.sizeof otomatik stringin uzunluğunu hesaplanmasını sağlar. Değerimiz string olduğundan değişkeni float türüne çevirmemiz gerekiyor. Bunun için 2. değişken oluşturup bunu floata çevireceğiz.

PHP Kod:
public Action CommandDegreeint clientint args )
{
 if( 
args != )
 {
 
ReplyToCommandclient"Eksik veya fazla terim yazdiniz" );
 return 
Plugin_Handled;
 }
 
char arg32 ];
 
GetCmdArg1argsizeofarg ) )
 
float degree StringToFloatarg );

     Şimdi kodumuzun son kısmına geldik. Derece değerini grada çevirip kullanıcıyı bilgilendiren bir bilgi mesajı verelim.

PHP Kod:
#include < sourcemod >

public Plugin myinfo =
{
 
name "Functions",
 
author "Anil Can",
 
description "Sample of Functions",
 
version "1.0.0",
 
url "https://forum.webdiyo.com"
}
public 
void OnPluginStart( )
{
 
RegConsoleCmd"sm_degree"CommandDegree );
}
public 
Action CommandDegreeint clientint args )
{
 if( 
args != )
 {
 
ReplyToCommandclient"Eksik veya fazla terim yazdiniz" );
 return 
Plugin_Handled;
 }
 
char arg32 ];
 
GetCmdArg1argsizeofarg ) )
 
float degree StringToFloatarg );
 
PrintToChatclient"%f degree is equal to %f grad"degreeDegreeToGraddegree ) );
 return 
Plugin_Handled;
}

float DegreeToGradfloat degree )
{
 
float grad = ( degree 10.0 ) / 9.0;
 return 
grad;

  
     İşte basit bir komutla girdiğmiz dereceyi grada çeviren bir plugin yazdık.Bu plugini eke koycam isteyenler incelebilir.
  
                                     DÖNGÜLER( While, for, do while yapısı )

    Bazen fonskiyonlardan işlemleri tekrar tekrar yapılması gerekir.Bunun için biz döngüleri kullanırız.Şimdi 0 dan 10 a kadar olan tüm doğal sayıların toplamını yazan bir fonksiyon yazacağım.Bunu ilkini döngü kulllanmadan yazacağım.

PHP Kod:
#include < sourcemod >

public Plugin myinfo =
{
 
name "Fonkisyonlar",
 
author "Anil Can",
 
description "Fonksiyon Ornegi 2",
 
version "1.0.0",
 
url "https://forum.webdiyo.com"
}
int g_sum 0;
int g_count 0;
public 
void OnPluginStart( )
{
 
RegConsoleCmd"sm_sum"CommandSum );
}
public 
Action CommandSumint clientint args )
{
 if( 
args != )
 {
 
ReplyToCommandclient"Eksik veya fazla terim yazdiniz" );
 return 
Plugin_Handled;
 }
 
char arg32 ];
 
GetCmdArg1argsizeofarg ) );
 
int value StringToIntarg );
 
 
SumIntegervalue );
 return 
Plugin_Handled;
}
int  SumIntegerint g_value )
{
 
g_count += 1;
 
g_sum += g_count;
 if( 
g_count == g_value )
 {
 
PrintToChatAll"%i'a kadar sayilarin toplami %i'dir."g_valueg_sum );
 
g_sum 0
 
}
 else
 {
 
SumIntegerg_value );
 }

     Şimdi bu şeklide yazılan scriptte fonkisyonun 10 kere çağırılmasına neden olur ve hafızda fazla yer kaplamsına neden olur.Böyle tekrar içeren yapılarda döngüleri kullanırız.Aynı fonksiyonu şu şekilde yazabiliriz.



PHP Kod:
#include < sourcemod >

public Plugin myinfo =
{
name "Fonkisyonlar",
author "Anil Can",
description "Fonksiyon Ornegi 3",
version "1.0.0",
url "https://forum.webdiyo.com"
}
int g_sum 0;
public 
void OnPluginStart( )
{
RegConsoleCmd"sm_sum"CommandSum );
}
public 
Action CommandSumint clientint args )
{
if( 
args != )
{
ReplyToCommandclient"Eksik veya fazla terim yazdiniz" );
return 
Plugin_Handled;
}
char arg32 ];
GetCmdArg1argsizeofarg ) );
int value StringToIntarg );

SumIntegervalue );
return 
Plugin_Handled;
}
int  SumIntegerint g_value )
{
for( 
int i 0<= g_valuei++ )
{
g_sum += i;
}
PrintToChatAll"%i'a kadar sayilarin toplami %i'dir."g_valueg_sum );
g_sum 0

    Gördüğünüz gibi fonksiyonu birden fazla çağırmak yerine tek bir çağırmada hallettik.Şimdi döngünü nasıl yaıldığını ve nasıl çalıştığını anlatacağım.1. parametre değişkeni tanımladığımız bölümdür.2. paramtere ise durumun kontrol edildiği parametredir.Son parametre ise 2. paramteredeki durum sağlanıyorsa işlenen paramteredir.Şimdi örneği açıklamak gerekirse 10 a kadar sayıların toplamını veren değeri bir değişkene atadım.İlk eleman 0 son eleman ise kullanıcının girdiği değer şeklinde yazıldı.For yapısında 1. dönüşünde sum değişekininin i değeri kadar artti( yani i++= 1 ).Yani sum değişkeni değeri 1 oldu.2. dönüşünde gene aynı şekilde olacaktır. sum değereri i kadar artacak( 1 +2 = 3).Şeklinde devam edecektir.En sonunda döngünden çıkınca bir bilgi mesajı verdik ve g_sum global bir değişken olduğundan değerini 0 atadık.

     while yapısı for döngüsüne göre daha basittir sadece tek bir paramtereye sahiptir.Parametetredeki değer false olana kadar döngü devam eder.

while( durum koşulu )
{
     //Kod block kısmı
}
     do  while döngüsü tek farkı değeri false olsa bile en az içerisindeki 1 kez çalıştırır.

do
{
     //Kod block kısmı
}
while( durum koşulu )
Son Düzenleme: 04-02-2020, 02:50, Düzenleyen: Anıl Can.
Cevapla
#2
Teşekkürler
Cevapla
#3
Teşekkürler
Cevapla
#4
Teşekkürler.
Cevapla
#5
Teşekkürler
Cevapla
#6
Teşekkürler
Cevapla
#7
Teşekkürler
Uygun Fiyata Uygun TasarımlarFacebook  / Steam
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task
Kayıt Ol