Değişken (bilgisayar bilimi) - Variable (computer science)

İçinde bilgisayar Programlama, bir değişken veya skaler bir depolama yeridir (bir hafıza adresi ) ilişkili bir sembolik isim olarak anılan bazı bilinen veya bilinmeyen miktar bilgileri içeren değer. Değişken adı, referans içeriğe bağlı olarak değişkenin kendisine atıfta bulunmanın yanı sıra depolanan değer. Adın ve içeriğin bu şekilde ayrılması, adın temsil ettiği kesin bilgilerden bağımsız olarak kullanılmasına izin verir. Bilgisayardaki tanımlayıcı kaynak kodu olabilir ciltli bir değer sırasında Çalışma süresi ve değişkenin değeri, bu nedenle, program yürütme.[1][2][3][4]

Programlamadaki değişkenler, kavramına doğrudan karşılık gelmeyebilir matematikte değişkenler. İkincisi Öz, depolama konumu gibi fiziksel bir nesneye referans olmadan. Bir hesaplama değişkeninin değeri, mutlaka bir denklem veya formül matematikte olduğu gibi. Bilgisayar programlamasındaki değişkenlere, kullanımlarını görece tanımlayıcı olmaları için sıklıkla uzun isimler verilirken, matematikteki değişkenler, transkripsiyon ve manipülasyonda kısalık sağlamak için genellikle kısa, bir veya iki karakterli isimlere sahiptir.

Bir değişkenin depolama konumu, birkaç farklı tanımlayıcı tarafından referans gösterilebilir, bu durum takma ad. Tanımlayıcılardan birini kullanarak değişkene bir değer atamak, diğer tanımlayıcılar aracılığıyla erişilebilen değeri değiştirecektir.

Derleyiciler değişkenlerin sembolik adlarını verilerin gerçek konumlarıyla değiştirmek zorunda. Bir değişkenin adı, türü ve konumu genellikle sabit kalırken, konumda depolanan veriler program yürütülürken değiştirilebilir.

Bir değişken üzerindeki eylemler

İçinde zorunlu Programlama dilleri değerler genellikle olabilir erişildi veya değişti her zaman. İçinde saf işlevsel ve mantık dilleri değişkenler ciltli ifadelere ve bunların tamamı boyunca tek bir değeri saklamaya ömür gereksinimleri nedeniyle referans şeffaflık. Zorunlu dillerde, aynı davranış (adlandırılır) tarafından sergilenir sabitler (sembolik sabitler), tipik olarak (normal) değişkenlerle zıttır.

Bağlı olarak tip sistemi bir programlama dilinin değişkenleri yalnızca belirli bir veri tipi (Örneğin. tamsayı veya dizi ). Alternatif olarak, bir veri türü yalnızca geçerli değerle ilişkilendirilebilir ve tek bir değişkenin programlama dili tarafından desteklenen herhangi bir şeyi saklamasına izin verir.

Değişkenler ve kapsam:

  • Otomatik değişkenler: Bir işlevdeki her yerel değişken, yalnızca işlev çağrıldığında ortaya çıkar ve işlevden çıkıldığında kaybolur. Bu tür değişkenler otomatik değişkenler olarak bilinir.
  • Harici değişkenler: Bunlar, üzerindeki bir fonksiyonun dışında olan ve herhangi bir fonksiyon tarafından isme göre erişilebilen değişkenlerdir. Bu değişkenler kalıcı olarak varlığını sürdürür; işlevler çağrılırken ve çıkılırken görünüp kaybolmak yerine, onları ayarlayan işlevler geri döndükten sonra bile değerlerini korurlar.

Bir değişkene referans veren tanımlayıcılar

Bir değişkene referans veren bir tanımlayıcı, değeri okumak, değeri değiştirmek veya diğerlerini düzenlemek için değişkene erişmek için kullanılabilir. Öznitellikler erişim izni gibi değişkenin kilitler, semaforlar, vb.

Örneğin, bir değişkene tanımlayıcı tarafından referans verilebilir "toplam sayım"ve değişken 1956 sayısını içerebilir. Aynı değişkene tanımlayıcı tarafından başvuruluyorsa"r"ayrıca ve bu tanımlayıcı kullanılıyorsa"r", değişkenin değeri 2009 olarak değiştirilir, ardından değeri tanımlayıcı kullanılarak okunur"toplam sayım"1956 değil, 2009 sonucunu verecektir.

Bir değişkene yalnızca, basitçe çağrılabilen tek bir tanımlayıcı tarafından başvuruluyorsa değişkenin adı. Aksi takdirde hakkında konuşabiliriz değişkenin isimlerinden biri. Örneğin, önceki örnekte "toplam sayım"söz konusu değişkenin adıdır ve"r"aynı değişkenin başka bir adıdır.

Kapsam ve kapsam

dürbün Değişken, değişkenin bir program metninde nerede kullanılabileceğini açıklarken kapsam (veya ömür) bir programın yürütülmesinde bir değişkenin (anlamlı) bir değere sahip olduğu zamanı tanımlar. Bir değişkenin kapsamı aslında değişkenin adının bir özelliğidir ve kapsam değişkenin kendisinin bir özelliğidir. Bunlarla karıştırılmamalıdır bağlam (olarak da adlandırılır çevre), programın bir özelliği olan ve kaynak kodunda veya çalıştırmada noktaya göre değişiklik gösterir - bkz. kapsam: genel bakış. Daha ileri, nesne ömrü değişken yaşam süresiyle çakışabilir, ancak çoğu durumda değişken yaşam süresine bağlı değildir.

Bir değişken adı dürbün etkiler kapsam.

Dürbün önemli bir parçasıdır Ad çözümlemesi bir değişkenin. Çoğu dil belirli bir dürbün belirli bir program içinde farklılık gösterebilen her değişken için (ve ayrıca adlandırılmış başka bir varlık). Bir değişkenin kapsamı, program kodunun değişkenin adının anlam taşıdığı ve değişkenin "görünür" olduğu söylenen kısmıdır. Bu kapsama giriş tipik olarak bir değişkenin yaşam süresine başlar (bağlama göre) ve bu kapsamdan çıkmak, tipik olarak ömrünü (bağlamın dışına çıktıkça) sona erdirir. Örneğin, "sözcük kapsamı "yalnızca belirli bir işlev içinde anlamlıdır /altyordam veya daha ince bir ifade / ifade bloğu içinde (buna göre işlev kapsamı veya blok kapsamı ); bu, ayrıştırma zamanında veya derleme zamanında gerçekleştirilebilen statik çözünürlüktür. Alternatif olarak, bir değişken dinamik kapsam spesifik kontrol akışına bağlı olan genel bir bağlama yığınına göre çalışma zamanında çözülür. Yalnızca belirli işlevlerde erişilebilen değişkenler "yerel değişkenler ". A"küresel değişken "veya belirsiz kapsamı olan biri, programın herhangi bir yerinde belirtilebilir.

KapsamÖte yandan, bir çalışma zamanıdır (dinamik ) bir değişkenin yönü. Her biri bağlayıcı bir değişkenin bir değere sahip olabilir kapsam işlem esnasında. Bağlamanın kapsamı, programın yürütme süresinin değişkenin aynı değere veya bellek konumuna başvurmaya devam ettiği kısmıdır. Çalışan bir program, belirli bir kapsamda olduğu gibi birçok kez girip çıkabilir. kapatma.

Programlama dili özellikleri olmadıkça çöp toplama, kapsamı kalıcı olarak kapsamını aşan bir değişken, bir bellek sızıntısı burada, değişken için tahsis edilen bellek asla serbest bırakılamaz, çünkü serbest bırakma amaçları için ona referans vermek için kullanılacak değişken artık erişilebilir değildir. Bununla birlikte, Lisp'te olduğu gibi bir değişken bağlamanın kapsamının ötesine geçmesine izin verilebilir. kapanışlar ve C statik yerel değişkenler; yürütme değişkenin kapsamına geri döndüğünde, değişken bir kez daha kullanılabilir. Kapsamı kapsamından önce başlayan bir değişken olduğu söylenir başlatılmamış ve erişilirse genellikle tanımlanmamış, keyfi bir değere sahiptir (bkz. vahşi işaretçi ), çünkü henüz açıkça belirli bir değer verilmemiştir. Kapsamı kapsamından önce biten bir değişken, bir sarkan işaretçi ve değeri yok edildiğinden beri bir kez daha başlatılmamış sayılır. Önceki iki durumda açıklanan değişkenlerin olduğu söylenebilir kapsam dışı veya bağlanmamış. Pek çok dilde, kapsam dışı olduğunda bir değişkenin değerini kullanmaya çalışmak bir hatadır. Diğer dillerde bunu yapmak, öngörülemeyen sonuçlar. Bununla birlikte, böyle bir değişkene yeni bir değer atanabilir ve bu da ona yeni bir kapsam sağlar.

Alan verimliliği için, bir değişken için ihtiyaç duyulan bir bellek alanı, yalnızca değişken ilk kullanıldığında tahsis edilebilir ve artık ihtiyaç kalmadığında serbest bırakılabilir. Bir değişkene yalnızca kapsam dahilinde ihtiyaç duyulur, bu nedenle kapsama girdiğinde her değişkenin yaşam süresine başlamak, kullanılmayan değişkenlere yer verebilir. Böyle bir alanı boşa harcamamak için, derleyiciler genellikle bir değişken bildirilirse ancak kullanılmazsa programcıları uyarır.

Bir programın farklı bölümlerinin birbirlerinin değişkenlerini değiştirerek yanlışlıkla birbirleriyle etkileşime girmemesi için değişkenlerin kapsamını mümkün olduğu kadar dar yapmak iyi bir programlama uygulaması olarak kabul edilir. Bunu yapmak aynı zamanda uzaktan hareket. Bunu yapmak için yaygın teknikler, bir programın farklı bölümlerinin farklı isim boşlukları veya tek tek değişkenleri "özel" yapmak için dinamik değişken kapsamı veya sözcüksel değişken kapsam belirleme.

Çoğu programlama dili ayrılmış bir değer kullanır (genellikle boş veya sıfır) geçersiz veya başlatılmamış bir değişkeni belirtmek için.

Yazıyor

İçinde statik olarak yazılmış gibi diller Java veya ML, bir değişkenin ayrıca bir tipyani içinde yalnızca belirli tür değerlerin saklanabileceği anlamına gelir. Örneğin, "türünde bir değişken"tamsayı "metin değerlerini saklamak yasaktır.

İçinde dinamik olarak yazılmış gibi diller Python, bunlar türü taşıyan değişkenler değil değerlerdir. İçinde Ortak Lisp, her iki durum da aynı anda mevcuttur: Bir değişkene bir tür verilir (bildirilmemişse, olduğu varsayılır Tevrensel üst tür ) derleme zamanında var olan. Değerlerin, çalışma zamanında kontrol edilebilen ve sorgulanabilen türleri de vardır.

Değişkenlerin yazılması ayrıca polimorfizmler derleme sırasında çözülecek. Ancak bu, nesne yönelimli işlev çağrılarında kullanılan polimorfizmden farklıdır ( sanal işlevler içinde C ++ ) çağrıyı, değişkenin sahip olmasına izin verilen süper türlerin aksine değer türüne göre çözer.

Değişkenler genellikle tamsayılar ve değişmez dizeler gibi basit verileri depolar, ancak bazı programlama dilleri bir değişkenin diğerlerinin değerlerini depolamasına izin verir. veri tipleri yanı sıra. Bu tür diller ayrıca işlevlerin parametrik polimorfik. Bu işlevler, birden çok türdeki verileri temsil etmek için değişkenler gibi çalışır. Örneğin, adlı bir işlev uzunluk bir listenin uzunluğunu belirleyebilir. Böyle bir uzunluk işlev, bir tür değişkeni dahil ederek parametrik polimorfik olabilir. tip imzası Listedeki elemanların sayısı elemanların türlerinden bağımsız olduğu için.

Parametreler

biçimsel parametreler (veya resmi argümanlar) fonksiyonlar da değişkenler olarak adlandırılır. Örneğin, bunda Python kod segmenti,

>>> def addtwo(x):...     dönüş x + 2...>>> addtwo(5)7

isimli değişken x bir parametre çünkü işlev çağrıldığında bir değer verilir. 5 tamsayısı tartışma hangi verir x Değeri. Çoğu dilde, işlev parametrelerinin yerel kapsamı vardır. Bu belirli değişken, x sadece içinde başvurulabilir addtwo işlev (tabii ki diğer işlevlerin de değişkenleri olabilir. x).

Bellek ayırma

Değişken tahsisinin özellikleri ve değerlerinin temsili, hem programlama dilleri arasında hem de belirli bir dilin uygulamaları arasında büyük farklılıklar gösterir. Birçok dil uygulaması için alan ayırır yerel değişkenler, kapsamı tek bir işlev çağrısı için süren çağrı yığını ve işlev geri döndüğünde kimin belleği otomatik olarak geri kazanılır. Daha genel olarak ad bağlama, bir değişkenin adı bellekteki belirli bir bayt bloğunun (bitişik sıra) adresine bağlıdır ve değişken üzerindeki işlemler bu bloğu işler. Referans kod derlendiğinde değerleri büyük veya bilinmeyen boyutlara sahip değişkenler için daha yaygındır. Bu tür değişkenler, değerin kendisini depolamak yerine değerin konumuna başvurur; bu, yığın.

Bağlı değişkenlerin değerleri vardır. Bununla birlikte değer, bir soyutlamadır, bir fikirdir; uygulamada, bir değer bazılarıyla temsil edilir veri nesnesi, bilgisayar belleğinde bir yerde saklanır. Program veya çalışma zamanı ortamı, her veri nesnesi için bir kenara bellek ayırmalı ve bellek sonlu olduğundan, nesnenin artık bazı değişkenlerin değerini temsil etmesi gerekmediğinde bu belleğin yeniden kullanım için verildiğinden emin olmalıdır.

Yığından ayrılan nesneler, özellikle nesnelere artık ihtiyaç kalmadığında geri alınmalıdır. İçinde çöp toplanmış dil (örneğin C #, Java, Python, Golang ve Lisp ), çalışma zamanı ortamı, mevcut değişkenler artık onlara başvuramadığında nesneleri otomatik olarak geri alır. Çöp toplanmayan dillerde, örneğin C, program (ve programcı) açıkça tahsis etmek hafıza ve daha sonra hafızasını geri kazanmak için onu serbest bırakır. Bunu yapmamak, bellek sızıntıları program çalışırken yığının tükendiği, kullanılabilir belleğin tüketilmesinden kaynaklanan nihai başarısızlık riskiyle karşı karşıya kalır.

Bir değişken bir veri yapısı dinamik olarak oluşturulmuşsa, bazı bileşenlerine değişken aracılığıyla yalnızca dolaylı olarak erişilebilir. Bu gibi durumlarda, çöp toplayıcılar (veya çöp toplayıcıları olmayan dillerdeki benzer program özellikleri) değişkenden erişilebilen belleğin yalnızca bir kısmının geri kazanılması gereken bir durumla ilgilenmelidir.

Adlandırma kuralları

Matematiksel karşılıklarının aksine, programlama değişkenleri ve sabitleri genellikle çok karakterli isimler alır, ör. MALİYET veya Toplam. Tek karakterli isimler en yaygın olarak yalnızca yardımcı değişkenler için kullanılır; Örneğin, ben, j, k için dizi indeksi değişkenler.

Bazı adlandırma kuralları, geçerli tanımlayıcıların biçimini içeren dil sözdiziminin bir parçası olarak dil düzeyinde uygulanır. Neredeyse tüm dillerde, değişken adları bir rakamla (0-9) başlayamaz ve boşluk karakterleri içeremez. Değişken adlarında noktalama işaretlerine izin verilip verilmeyeceği, dilden dile değişir; birçok dil yalnızca vurgulamak ("_") değişken adlarında ve diğer tüm noktalama işaretlerini yasaklar. Bazı programlama dillerinde, işaretler (semboller veya noktalama işaretleri), değişkenin veri türünü veya kapsamını belirtmek için değişken tanımlayıcılara eklenir.

Büyük küçük harf duyarlılığı değişken isimleri de diller arasında farklılık gösterir ve bazı diller belirli varlıkların adlandırılmasında belirli bir durumun kullanılmasını gerektirir;[not 1] Çoğu modern dil büyük / küçük harfe duyarlıdır; bazı eski diller değildir. Bazı diller, kendi iç kullanımları için belirli değişken ad biçimlerini saklar; birçok dilde, iki alt çizgi ("__") ile başlayan adlar genellikle bu kategoriye girer.

Bununla birlikte, bir dilin dayattığı temel kısıtlamaların ötesinde, değişkenlerin isimlendirilmesi büyük ölçüde bir tarz meselesidir. Şurada makine kodu düzey, değişken isimleri kullanılmadığından, seçilen isimler bilgisayar için önemli değildir. Bu nedenle değişken isimleri onları tanımlar, geri kalanı için programcılar için programları yazmayı ve anlamayı kolaylaştıran bir araçtır. Kötü seçilmiş değişken adlarının kullanılması, kodun gözden geçirilmesini tanımlayıcı olmayan adlara göre daha zor hale getirebilir, bu nedenle açık olan adlar genellikle önerilir.[5][6]

Programcılar genellikle değişkenleri adlandırma konusunda rehberlik eden veya kesin bir adlandırma şeması empoze eden kod stili yönergeleri oluşturur ve bunlara uyar. Daha kısa adlar yazmak daha hızlıdır ancak daha az açıklayıcıdır; Daha uzun isimler genellikle programların okunmasını ve değişkenlerin amacının anlaşılmasını kolaylaştırır. Bununla birlikte, değişken adlarındaki aşırı ayrıntı da daha az anlaşılır koda yol açabilir.

Değişken türleri (ömür süresine göre)

Değişkenlerin sınıflandırılması açısından, değişkenleri yaşam sürelerine göre sınıflandırabiliriz. Farklı değişken türleri statik, yığın dinamik, açık yığın dinamik ve örtük yığın dinamiktir. Statik değişken, genel değişken olarak da bilinir, yürütme başlamadan önce bir bellek hücresine bağlanır ve sona erene kadar aynı bellek hücresinde kalır. Tipik bir örnek, C ve C ++ 'daki statik değişkenlerdir. Yığın-dinamik değişken, bildirim ifadesi yürütüldüğünde bağlanan yerel değişken olarak bilinir ve prosedür geri döndüğünde serbest bırakılır. Ana örnekler, C alt programlarındaki yerel değişkenler ve Java yöntemleridir. Açık Yığın-Dinamik değişkenler, programcı tarafından belirtilen açık çalışma zamanı talimatları tarafından tahsis edilen ve serbest bırakılan isimsiz (soyut) bellek hücreleridir. Ana örnekler, C ++ 'daki dinamik nesneler (yeni ve silme yoluyla) ve Java'daki tüm nesnelerdir. Örtülü Yığın-Dinamik değişkenler, yalnızca değerler atandıklarında yığın depolamaya bağlıdır. Değerler değişkenlere yeniden atandığında tahsis ve serbest bırakma gerçekleşir. Sonuç olarak, örtük yığın dinamik değişkenler en yüksek esneklik derecesine sahiptir. Ana örnekler JavaScript, PHP'deki bazı değişkenler ve APL'deki tüm değişkenlerdir.

Ayrıca bakınız

Notlar

  1. ^ Örneğin, Haskell tür adlarının büyük harfle başlamasını gerektirir.

Referanslar

  1. ^ Derleyiciler: İlkeler, Teknikler ve Araçlar, s. 26–28
  2. ^ Knuth Donald (1997). Bilgisayar Programlama Sanatı. 1 (3. baskı). Okuma, Massachusetts: Addison-Wesley. s. 3-4. ISBN  0-201-89683-4.
  3. ^ "Değişkenlerle programlama". Khan Academy. Alındı 23 Mart 2020.
  4. ^ "Yetişmekte Olan Kodlayıcılar İçin Çizik". Harvard. Alındı 23 Mart 2020.
  5. ^ Değişkenler Nasıl Seçilmez?, Erişim tarihi: 11 Temmuz 2012 [DEAD LINK]
  6. ^ Edsger Dijkstra, "Anlamlı tanımlayıcıların" canı cehenneme!