Merhaba, tekrar hoş geldiniz.
Bu konuşmada, şu konulardan bahsetmek istiyorum yerel ve global değişkenler hakkında.
Bu gerçekten fonksiyon kavramıdır veya genel program kapsamında.
Bunun ne zaman değişkenleri ne zaman kullanabileceğiniz ve ne
zaman kullanamayacağınız.
İşlevlerin ne olduğunu biliyoruz.
Şimdi konuşmak istiyorum. yerel değişkenler hakkında.
Yerel değişkenlerin gerçekten yapması gerekenler sadece işlevlerden daha fazlasıyla.
Yerel değişkenlerin aşağıdakilerle ilgisi vardır kod bloğu olan herhangi bir şey.
Yani içinde tanımlanan değişkenler bir işlevin otomatik yerel değişkenleri
olarak bilinir.
Yani bu fonksiyon gövdesinde, arada bu başlangıç ve bitiş parantezleri,
bir değişken bildirirseniz, bu değişkeni yerel bir değişkendir.
Otomatik olarak oluşturulacaktır işlev her çağrıldığında.
Ayrıca, herhangi bir değer Bu değişkene erişim yalnızca işlev
için yereldir.
Bu değişkene erişemezsiniz bu işlevin dışında.
Bu yüzden değişkene erişilemez belirli bir işlev için yerel
ise diğer işlevlerde.
Sadece erişilebilir tanımlandığı yerden.
Bir başlangıç değeri verilirse bir fonksiyonun içindeki
bir değişkene aktarıldığında, bu ilk değer fonksiyon her çağrıldığında değişkene
atanır.
içinde bir değer tutmak istiyorsanız sonraki her çağrıda bir değişken, aslında
bunu yapmanın bir yolu var c'de, bir fonksiyonun içinde statik değişken
olarak adlandırılır.
Bu, yine, daha çok gelişmiş bir konsepti başlangıç
sınıfında değil, ama bir şekilde aslında işlevleri her çağırdığınızda
farklı verilere sahip olursunuz.
Yani eğer örneğin bir fonksiyonun kaç kez çağrıldığını gösteren bir sayaç Bu
işlevin içindeki yerel değişken static anahtar sözcüğü
ile static olarak adlandırılır.
Ama sadece normal yerel değişkenler her seferinde yeni
değerlere sahip olacaktır.
Otomatik anahtar sözcüğünü daha önce kullanabilirsiniz veri türü, ancak bu gerekli değildir.
Bu onu bir biraz daha kesin.
Derleyici bunu şu şekilde ekleyecektir eğer dahil etmezseniz varsayılan.
Ama eğer dahil ederseniz, bu sadece daha
kesin hale getirecek, gerekli değil.
Bu yüzden buna otomatik yerel değişken.
c'de auto adında bir anahtar sözcük vardır, ancak varsayılan olarak sağlandığını
sağlamanıza gerek yoktur ve bu nedenle değişkenlerin tanımlandığı pek çok
örnekte bunu göremezsiniz ve bir işlevin içinde bildirilir.
Yerel değişkenler aşağıdakiler için de geçerlidir değişkenin bir blokta, döngülerde veya
if deyimlerinde oluşturulduğu herhangi bir kod.
Yine, eğer bir if deyiminiz varsa if deyimi için blok nedir, sadece parantezlerin
başladığı yerdir.
Buna blok denir.
Bloklar fonksiyonlar içinde olabilir, bloklar if ifadeleri olabilir, bloklar
döngüler içinde olabilir.
Bloklar herhangi bir yerde olabilir Aslında parantezler var.
Parantezlerin olduğu her yerde ve bu değişkeni oluşturursunuz.
Değişkenin oluşturulması şu şekilde bildirilir ve belki de ona değerler atamak.
Ancak bu değişkeni bildirirseniz, Bu değişkeni bir blok içinde
oluşturduğunuzda, yalnızca blok içindeki değişken.
Eğer buna erişmeye çalışırsanız değişkeni blok dışında ise kullanılmayacaktır.
Yani bir if deyiminiz varsa, if deyiminin içinde
bir değişken bildirirseniz bu değişkeni if deyimi bloğunun dışında,
döngülerde olduğu gibi.
Bu çok önemli Bunu anlamak için.
Derleyici şikayet edecek ve başka bir yerden erişmeye
çalışırsanız size hata verir.
Bu da şu anlama geliyor. verilerdeki değerler yalnızca
o blok için geçerlidir.
Hiçbir veri paylaşmıyorsunuz.
Global değişkenler yerel bir değişkenin tersi.
Global değişkenlere erişilebilir programdaki herhangi bir işlev tarafından.
Küresel bir değişkenini herhangi bir işlevin dışında
en üste koymanızdır.
Yani küresel değişkenler şöyle bildirilir işlevin dışındadır ve herhangi
bir işleve ait değildirler.
Unutmayın, ana anahtar kelime main bir fonksiyondur.
içinde tanımlanan tüm değişkenler ana fonksiyona yalnızca ana fonksiyondan
erişilebilir.
Yani ana bölümdeki değişkenler işlevine başka hiçbir işlevde
erişilemez.
Eğer bir değişken istiyorsanız tüm fonksiyonlar tarafından kullanıldığında, değişkeni
bir fonksiyonun dışına koyarsınız, genellikle kaynak dosyanın en üstünde
yer alır ve genellikle bunun global bir değişken olduğunu söyler.
Global değişken, aşağıdakiler için bir yalandır programın başladığı andan itibaren
programın tamamını durduğunda, bu global değişken bellekte
yer alacaktır.
Programdaki herhangi bir işlev sahip oldukları için bu global değişkenin değerini değiştiremezler. erişebilirlerse,
onu değiştirebilirler.
Ve bu yüzden düşünmeye başlamalısınız vay canına, bu biraz tehlikeli görünüyor çünkü
şimdi Aynı veriye her yerden erişebilen kod,
ancak buna geleceğiz.
Bildirilmiş bir yerel değişken varsa global bir
değişkenle aynı ada sahip bir işlevde, o zaman bu fonksiyonu yerel değişkeni kullanacak, global değişkeni
maskeleyecektir.
Yani eğer global bir değişkeniniz varsa x ve bir fonksiyonun içinde x adında
bir yerel değişkeniniz varsa, yerel değişkeni öncelikli olacaktır.
Değiştirmeyecek küresel değişkenler verisi.
Eğer buna atama yaparsanız değişkenini değiştirirse,
yalnızca yerel değişkeni değiştirecektir.
Yani global değişken aynı ada sahip olduğunuzda erişilebilir
ve aslında bu yerel işlev içinde erişilebilir, bu nedenle
aynı çünkü kafa karıştırıcı olacak.
Programlanmış insanlar için çok, ileri düzey programcılar
bunu hemen fark ederler.
Diyecekler ki hey bu sadece görseler bile sadece yerel değişkeni
değiştiriyor gibi davranırlar. aynı isimli küresel fiil.
Ama yeni başlayanlar için her zaman çok net değildir.
Size bir örnek vereyim.
Bu örnekte, biz ana işlevden önce en üstte bir global
değişken oluşturmak.
Ve nasıl organize etmek istediğinizi programınız genellikle bazı ifadelerden
sonra en üstte ifadeleri dahil etmenizi sağlar yorumlar olabilir ve sonra bazı tanımlanmış sabitleriniz
olabilir ve sonra global değişkenlerinize sahip olacaktır.
Global değişkenler sadece normal değişkenler gibi.
Sadece bulundukları yer aslında ilan etti.
dışında beyan edilirlerse bir işlev, o zaman küreseldirler.
Yani bu örnekte, elimizde bir global değişkenim olarak adlandırılır.
0'a başlatıyoruz.
Bunları da başlatabiliriz küresel değişkenleri herhangi bir yerde.
Bunları şu durumlarda başlatabiliriz bunları bildiririz veya
herhangi bir işlevde başlatabiliriz.
Bu bir tamsayı.
Ayrıca iki fonksiyonumuz var, ana işlevi benim işlevim adlı
bir işlevin içine yerleştirin.
İçeride, yerel değişkenlerine yalnızca bu işlevlerin
içinden erişilebilir.
Ana işlevde, yerel bir merkezimiz var.
Yalnızca yerel ağıma erişebilirsiniz main fonksiyonu içinde main.
Ancak globalim bir değişken olduğu için Bu globaldir, buna ana fonksiyondan
da erişebilirsiniz.
Böylece ana bilgisayar iki değişkenler, yerel ve global.
Ve fonksiyonumun bir yerel değişkeni var x olarak adlandırılır çünkü işlev gövdesinin
parantezleri içinde bildirilir ve aslında benim global değişkenim olan global değişkene
erişebiliriz.
Ayrıca x'e de erişebiliriz, ancak lokalime erişemiyoruz.
Yerel ana merkezim demeliyim.
Çünkü yerel ana merkezim sadece ana fonksiyonun içinde.
Buna erişimimiz yok.
Eğer yazmaya ya da okumaya çalışırsak my fonksiyonu içindeki yerel
ana değişken, derleyici size bir hata verecek.
Bunu anlamanız gerekiyor yerel ve küresel kavramı.
Yerel kod bloklarının içindedir.
İlan edildiklerinde, şunları yapabilirsiniz sadece blokta kullanın.
Bir değişken bir bloğun dışındaysa ve sadece bir fonksiyonda veya sadece programın kendisinde,
herhangi bir fonksiyonda erişebilirsiniz.
Global değişkenlerden kaçınılmalıdır.
Global değişkenler şunlardır kötü bir şey.
Bunların küresel olmasının nedeni değişkenlerin kötü olması ve onlardan neden kaçınmanız
gerektiğidir. fonksiyonlar arasındaki bağlantıyı teşvik eder.
Kuplaj ne anlama geliyor?
Bağlantı, bağımlılık anlamına gelir.
Eğer global bir değişkeniniz varsa ve dört fonksiyon
tarafından kullanılıyor, yani her biri Bu işlevlerden biri diğerine
bağımlı olabilir.
Bağımlılığın nesi var?
Bağımlılık bir programın hata ayıklamak ve hataları bulmak çok daha zordur.
Eğer programınızda bir hata varsa ve global bir değişken kullanıyorsunuz
ve global değişken hata, şimdi bu hata herhangi bir fonksiyonda herhangi bir
yerde olabilir. bu global değişkeni kullanarak.
İşleri karmaşıklaştırıyor küresel verilere sahip olduğunuzda.
Global bir değişkeniniz var, bu birinci fonksiyonda, ikinci fonksiyonda, üçüncü fonksiyonda
ve dördüncü fonksiyonda değiştirilebilir.
Buna erişimi kısıtlamıyorsunuz. Hatayı bulduktan sonra da çok zordur
ve izole ederseniz, bunu düzeltmek çok
zor olabilir.
Çünkü şimdi tamir ettiğinizde bu bağımlılıklar nedeniyle diğer işlevlerde
sorunlara neden olabilir.
Global değişkenler şu şekilde olmalıdır Bu bağlantı nedeniyle mümkün
olduğunca kaçınılmalıdır, bu bağımlılıklar nedeniyle.
İhtiyaç duyabileceğiniz zamanlar vardır kullanmak için, ama bundan kaçınmalısınız.
Ve akılda tutmak için çoğu c++ gibi nesne yönelimli dillerin
çoğunda modern diller ve java'da global değişken kavramı
bile yoktur.
Statik değişkenleri vardır sınıf değişkenleri olabilir, ancak yine de bir
sınıfın içinde kapsüllenirler.
Çünkü küresel veriler kötü bir şey, yeni diller aslında yasaklamaya
çalışıyor.
Ve şunlardan kaçınmaya çalışmalısınız çünkü bu sadece programınızı
karmaşıklaştırır ve hataları bulmak ve hata ayıklamak daha zordur.
Global kullanmak yerine veri, fonksiyonlara veri aktarma.
Bir fonksiyonun erişime ihtiyacı varsa bazı verilere, ona aktarın.
Eğer -- eğer çok fazla veri varsa ve çok fazla parametreye sahip olmak istiyorsanız,
teorik olarak, asla gerçekten beşten fazla parametreye sahiptir.
Orada harika bir kitap var Adı Kod kalitesinden ve kaçınılması gereken şeylerden
bahseden temiz kod küresel değişkenler gibi kaçınılması gereken şeyler.
Aynı zamanda nasıl fonksiyonlarınızda olması gereken
parametre sayısı.
Ve eğer bir fonksiyonun 20 parametresi varsa, bir şeylerin yanlış gittiğinin
göstergesidir, çünkü bu işlev muhtemelen çok fazla şey yapıyor.
Ancak bir fonksiyon verilere erişebilir sadece veriyi ona aktararak global verinin kullanımını
kısıtlayabilirsiniz.
Ve çok fazla zaman alan bir fonksiyon için veri, hakkında konuşmadığımız
struct adı verilen bir şey kullanabilirsiniz ama bunu yapmanın başka bir yolu da bu.
Bu yüzden küresel verileri çok fazla kullanmayın mümkün olduğunca sadece gerekli olduğunda.
Kodu anladığınızdan emin olun.
Belgelediğinizden emin olun gerçekten çok iyi.
Böylece başka biri kodda global veri kullandığınızı
hemen anlar ve her şeyin nasıl çalıştığını bilir.
Bu, fonksiyon kapsamı kavramıdır.
Bunu anlamanız gerekir, Bu yüzden tüm bu slaytlara dikkat edin.
Ve ayrıca bazılarını kullanacağız küresel veriler ve bir sonraki yarışmamızda
bazı yerel veriler. Teşekkür ederim.