Ruby'deki Global Değişkenler

Global Değişkenler değişkenler kapsamdan bağımsız olarak programın herhangi bir yerinden erişilebilir. Bir $ (dolar işareti) karakteri ile başlayarak belirtilirler. Bununla birlikte, küresel değişkenlerin kullanımı genellikle "Ruby olmayan" olarak kabul edilir ve bunları nadiren görürsünüz.

Global Değişkenleri Tanımlama

Global değişkenler diğer değişkenler gibi tanımlanır ve kullanılır. Bunları tanımlamak için, onlara bir değer atayın ve kullanmaya başlayın. Ancak, adından da anlaşılacağı gibi, programın herhangi bir noktasından global değişkenlere atanmanın küresel sonuçları vardır. Aşağıdaki program bunu göstermektedir. Yöntem genel bir değişkeni değiştirir ve bu, ikinci yöntem çalışır.


$ hız = 10. def hızlanma. $ hız = 100. son. def pass_speed_trap. $ speed> 65 ise. # Programa hızlı bir bilet verin. son. son. hızlandırır. pass_speed_trap. 

popüler olmayan

Peki bu neden "Yakut değil" ve neden küresel değişkenleri çok sık görmüyorsunuz? Basitçe söylemek gerekirse, kapsüllemeyi kırar. Herhangi bir sınıf veya yöntem, arabirim katmanı olmadan isteğe bağlı olarak genel değişkenlerin durumunu değiştirebilirse, bu küresel değişkene dayanan diğer sınıflar veya yöntemler beklenmedik ve istenmeyen bir şekilde davranabilir tavır. Ayrıca, bu tür etkileşimlerin ayıklanması çok zor olabilir. Bu küresel değişkeni ne zaman değiştirdi? Ne yaptığını bulmak için oldukça fazla kod inceleyeceksin ve kapsülleme kurallarını ihlal etmeyerek bundan kaçınılabilirdi.

instagram viewer

Ancak bu küresel değişkenlerin asla Ruby'de kullanılır. Tek karakterli adlara sahip bir dizi özel küresel değişken vardır (a-la Perl) kullanabilirsiniz. Programın durumunu temsil ederler ve herkes için kayıt ve alan ayırıcılarını değiştirmek gibi şeyler yaparlar. alır yöntemleri.

Global Değişkenler

  • $0 - $ 0 ile gösterilen bu değişken (sıfırdır), yürütülmekte olan en üst düzey komut dosyasının adını tutar. Başka bir deyişle, Komut satırı, şu anda yürütülen kodu içeren komut dosyasını değil. Yani, eğer script1.rb komut satırından çalıştırıldı, script1.rb. Bu komut dosyası gerekiyorsa script2.rb, Bu komut dosyasında $ 0 da olurdu script1.rb. $ 0 adı, aynı amaçla UNIX kabuk komut dosyalarında kullanılan adlandırma kuralını yansıtır.
  • $* - $ * (dolar işareti ve yıldız) ile belirtilen bir dizideki komut satırı bağımsız değişkenleri. Örneğin, eğer koşacak olsaydın ./script.rb arg1 arg2, o zaman $ *, % w {arg1 arg2}. Bu özel ile eşdeğerdir ARGV dizi ve daha az açıklayıcı bir adı vardır, bu yüzden nadiren kullanılır.
  • $$ - Tercümanın süreç kimliği, $$ (iki dolar işareti) ile gösterilir. Kişinin kendi işlem kimliğini bilmek (arka planda çalışan, herhangi bir terminalden bağımsız olarak) daemon programlarında veya sistem hizmetlerinde genellikle yararlıdır. Bununla birlikte, dişler söz konusu olduğunda bu biraz daha karmaşık hale gelir, bu yüzden körü körüne kullanmaya dikkat edin.
  • $ / ve $ \ - Bunlar giriş ve çıkış kayıt ayırıcılarıdır. Nesneleri kullanarak okuduğunuzda alır ve bunları kullanarak yazdırın koyar, tam bir "kaydın" ne zaman okunduğunu veya birden fazla kayıt arasında ne yazdıracağını bilmek için bunları kullanır. Varsayılan olarak, bunlar yeni satır karakteri olmalıdır. Ancak bunlar tüm IO nesnelerinin davranışını etkilediğinden, nadiren kullanılırlar. Bunları, kapsülleme kurallarını ihlal etmenin bir sorun olmadığı daha küçük komut dosyalarında görebilirsiniz.
  • $? - Yürütülen son alt işlemin çıkış durumu. Burada listelenen tüm değişkenlerden, bu muhtemelen en yararlı olanıdır. Bunun nedeni basittir: Alt süreçlerin çıkış durumlarını, sistem yöntem, yalnızca doğru veya yanlış. Alt sürecin gerçek dönüş değerini bilmeniz gerekiyorsa, bu özel global değişkeni kullanmanız gerekir. Yine, bu değişkenin adı UNIX mermilerinden alınmıştır.
  • $_ - Son okunan dize alır. Bu değişken Perl'den Ruby'ye gelenler için bir karışıklık noktası olabilir. Perl'de $ _ değişken benzer, ama tamamen farklı bir şey anlamına gelir. Perl'de, $_ son ifadenin değerini tutar ve Ruby'de önceki ifadenin döndürdüğü dizeyi tutar alır çağırma. Kullanımları benzer, ancak gerçekte tuttukları çok farklı. Bu değişkeni de sık sık görmezsiniz (düşünün, nadiren bu değişkenlerden herhangi birini görürsünüz), ancak bunları metin işleyen çok kısa Ruby programlarında görebilirsiniz.

Kısacası, nadiren küresel değişkenleri göreceksiniz. Genellikle kötü bir formdur (ve "Yakut olmayan") ve yalnızca kullanımlarının tam anlamının tam olarak takdir edilebileceği çok küçük komut dosyalarında gerçekten faydalıdırlar. Kullanılabilecek birkaç özel küresel değişken vardır, ancak çoğunlukla kullanılmazlar. Ruby programlarının çoğunu anlamak için küresel değişkenler hakkında çok fazla şey bilmenize gerek yoktur, ancak en azından orada olduklarını bilmelisiniz.