Alt programlar: prosedürler ve işlevler - 1


Bir alt program , bir programın bir adı olan ve kendi ayrı görevini çözen ayrı bir parçasıdır. Alt program, ana programın başında bulunur ve adı belirtilerek ana programdan başlatılabilir (çağırılabilir).

Alt programları kullanmak, aynı kodu farklı yerlerde programlara yazmanız gerektiğinde kod tekrarını önlemenizi sağlar . 
Bir programa (örneğin, Sistem) içe aktarılan kitaplıklar, zaten birisi tarafından derlenmiş olan rutinlerden oluşur. Programcıların içlerinde hangi algoritmaların uygulandığını düşünmeleri gerekmez, sadece tam olarak ne yaptıklarını düşünerek onları uygularlar. Bu büyük bir zaman tasarrufu. Daha önce başkası tarafından yazılmış bir algoritma yazmaya gerek yoktur.

Her alt program yalnızca bir görev yapmalı, ya bir şey hesaplamalı, ya da bazı verileri çıkarmalı ya da başka bir şey yapmalı. 

Alt programlar veya yöntemler iki türdendir -  işlevler (işin sonucunu döndürenler) ve prosedürler (döndürmeyenler).

İkinci tiple başlayalım. Basit bir örnek yazmaya çalışalım.
Ekranda "Error" dizesini görüntülememiz gerektiğini varsayalım. her defasında kullanıcının hatası nedeniyle kodda bir hata oluşabilir (örneğin, yanlış veri girdiğinde).
Bu,
ifadesini yazarak yapılabilir.
Console.WriteLine("Error");
Şimdi bu satırın programda birçok yere eklenmesi gerektiğini düşünelim. Tabii ki, her yere yazabilirsiniz. Ancak bu çözümün iki dezavantajı vardır.
1) bu dizi hafızada birçok kez saklanacaktır;
2) Hata durumunda çıktıyı değiştirmek istiyorsak bu satırı program boyunca değiştirmek zorunda kalacağız ki bu oldukça elverişsizdir.

Bu tür durumlar için yöntem ve prosedürlere ihtiyaç vardır.
Prosedürü olan bir program şöyle görünebilir:

Sistem kullanılarak;
sınıfProgramı {
    statik geçersiz PrintError() {
        Console.WriteLine("Hata");
   
    statik boşluk Ana() {
        PrintError();
   
}

 

Bir prosedür void kelimesiyle başlar. Sonra prosedür adı  boş parantezler yazılır.
Bir prosedürde yürütülen tüm ifadeler girintilidir. 
Statik  değiştiricisi, verilen alan, yöntem veya özelliğin sınıfın her nesnesine değil, hepsine ait olacağı anlamına gelir.
Yöntemler ve prosedürler ana yöntem Main()'den önce yazılır.

Bir prosedüre atıfta bulunmak için, ana programda onu ismiyle çağırmanız ve parantez yazmayı unutmayın.
Bir programdaki bir prosedürü istediğiniz sayıda çağırabilirsiniz.

Şimdi bir kullanıcı hatasına yanıt olarak farklı mesajlar göstermemiz gerektiğini düşünelim. tam olarak nasıl bir hata yaptı.
Bu durumda, her hata için kendi prosedürünüzü yazabilirsiniz: 

 

geçersiz printErrorZero() {     Console.WriteLine("Hata. Sıfıra bölme!"); }

 

 

void printErrorInput()
{
    Console.WriteLine("Girişte hata!");
}

Ya daha birçok olası hata varsa? O zaman bu çözüm bize uymayacaktır.
Hangi hata mesajını göstereceğini söyleyerek prosedürü nasıl kontrol edeceğimizi öğrenmemiz gerekiyor.
Bunun için prosedür adından sonra parantez içinde yazacağımız parametrelere ihtiyacımız var
void printError(string s)
{
    Console.WriteLine(lar);
}
Bu prosedürde, s bir parametredir - özel bir değişkendir. prosedürün kontrol edilmesini sağlar.
parametresi, alt programın çalışmasının değerine bağlı olduğu bir değişkendir. Alt program başlığında parametre adları virgüllerle ayrılmış olarak listelenir. Parametre türü, parametreden önce yazılır.

Şimdi, prosedürü çağırırken, atanacak gerçek değeri parantez içinde belirtmeniz gerekiyor prosedürümüzün içindeki parametreye ( s değişkeni)
printError("Hata! Sıfıra bölme!");
Bu değere argüman denir.
Argüman, alt program çağrıldığında ona iletilen parametre değeridir.
Bağımsız değişken yalnızca sabit bir değer değil, aynı zamanda bir değişken veya aritmetik bir ifade olabilir.< /span>

Yerel ve genel değişkenler
Yalnızca alt programda kullanılacak olan ek değişkenlerin kullanılması genellikle gereklidir. Bu tür değişkenler yerel (veya yerel) olarak adlandırılır ve yalnızca oluşturuldukları alt program içinde değiştirilebilir.
 
Yerel değişken kapsamı, içinde bildirildiği süslü parantez içindeki bloktur.
C# dilindeki ana program aynı zamanda bir alt programdır, dolayısıyla void Main() içinde bildirilen tüm değişkenler yerel değişkenlerdir. Diğer alt programlar, diğer alt programların yerel değişkenleri hakkında hiçbir şey "bilmezler".

Böylece, bir değişkenin kapsamını (kapsamını) yalnızca gerçekten ihtiyaç duyulduğu alt programla sınırlandırmak mümkündür. Programlamada bu tekniğe kapsülleme  - değişkenin dışarıdan değiştirilmesini gizleme.

Programın herhangi bir yerinde (herhangi bir alt programda) görülebilecek bir değişkeni bildirmek gerekirse, bu tür değişkenler tüm alt programların dışında bildirilir (aşağıdaki tablodan program 3'e bakın).
Bu tür değişkenlere global denir.

C#'ta program başladığında, tüm global değişkenler otomatik olarak sıfıra ayarlanır (boolean değişkenler false değerini alır).

Üç programı analiz edin:

1) Bu programda i değişkeni yereldir. Yerel bir değişken, bir alt program içinde bildirilir. 2) Burada ana programda i değişkeni olsa bile (değeri 7 olan), değeri 5 olan yeni bir i yerel değişkeni oluşturulacaktır. 
Bu program çalıştırıldığında ekrana 75 değeri gelecektir.
3) Bu programın global bir i değişkeni vardır. Değeri, alt program içinde ve ana program içinde değiştirilebilir.
Prosedür i global değişkeni ile çalışacak ve ona 2'ye eşit yeni bir değer atanacak. 2 değeri görüntüleniyor.
statik boşluk testi () {   int ben = 5; Console.Write("i"); } statik boşluk testi () {   int ben = 5;   Console.Write("i"); } statik boşluk Ana() { int ben = 7;   Console.Write("i");   Ölçek(); } Sistemi kullanarak; sınıf Programı { int ben; statik boşluk testi () {   ben = 2; } statik boşluk Ana() { Ölçek(); Console.Write("i"); } }
Görev
İki değişkenin değerlerini değiştiren bir prosedür yazın.

Bu görevin özelliği, çağıran program tarafından bilinmek için prosedürde yapılan değişikliklere ihtiyaç duymamızdır.

Prosedürü şu şekilde yazmaya çalışalım: static void Swap (int a, int b) // prosedür parametrelerinin böyle bir açıklaması ile, { // bağımsız değişkenlerin (x ve y) değerlerini kopyalar int c; // a ve b değişkenleri, x ve y ile ilgili olmayan bağımsız değişkenlerdir c = bir; bir = b; b=c; } statik boşluk Ana() { int x=1, y=2; Değiştir(x, y); //x ve y değişkenlerinin değerleri (argümanlar) a ve b, x = 1, y = 2 parametrelerine kopyalanır } Bu programı çalıştırırsanız x ve y değişkenlerinin değerlerinin değişmediğini görebilirsiniz. Parametrelerin argümanların değerlerini değiştirebilmesi için referansa göre veri aktarımını kullanmalısınız.Bunu yapmak için başlıkta veri türünün adından önce ref yazmalısınız. alt programdan. void Swap ( ref int a, ref int b ) // şimdi a ve b değişkenleri bellekteki x ve y değişkenlerinin adreslerini alıyor { int c; c = bir; bir = b; b=c; } statik boşluk Ana() {   int x=1, y=2;   Swap(ref x, ref y); Uygulama: Bir bağımsız değişkeni referans olarak iletirseniz, prosedür çağrılırken bu yerde yalnızca değişkenin adı (bir sayı ve bir aritmetik ifade DEĞİLDİR) durabilir.

Böyle bir prosedürü çağıramazsınız:
Değiştir(x, 4);
Değiştir(5+x, y);