1372826956:AAFe2Py65GSQkfGiRnXuOQ-eD9yXcwMv988

AutoLISP Dersleri #5 – Değişkenler

sekil-01

Değişkenler prensip olarak değerleri depolamak için kullanılırlar. Ayrıca değerleri depolamak için, dosyalarda kullanılabilir; fakat değişkenler değerleri kısa süreli depolamak için kullanılırlar.

AutoLISP değişkenleri aşağıdaki dört tipten bir tanesi olabilir.

  • tam sayı
  • reel sayı
  • nokta
  • dizge

AutoLISP’te değişkenler içerdikleri değer göz önüne alınarak otomatik olarak yazılırlar; yani değişkenlerin yazılması gerekmez.

SETQ fonksiyonu değişken yaratmak için, kullanılır. Bir değişken kendisine bir değer bağlanana dek hiçbir değer içermez. Şayet bir değişkene bir değer iliştirmeden önce o değişkeni referanslarsanız, referansın sonucu olarak hiçbir değer elde edemezsiniz (boş bir değişken elde edersiniz).

(setq a 3) ;Tam sayı değişkeni(setq a 3.00) ;Reel sayı değişkeni(setq a (list 1.50 2.375 1.00) ;Nokta değişkeni(setq a “Bu bir dizgedir.”) ;Dizge değişkeni

Değişkenleri İsimlendirme


3 numaralı AutoLISP Dersleri makalesinde açıklamaları tartışırken, tüm açıklama yöntemlerinin en kolayı olan değişken isimleri konusunu atlamıştık. Şayet programınızda uygun değişken isimlerini kullanırsanız, kodunuzun büyük bir kısmı kendi kendini açıklar halde olacaktır. Böylece ihtiyacınız olan tek şey kodunuzun içerisinde okunması kolay olmayan kısımları açıklamak olacaktır.

Değişkenler 2 numaralı AutoLISP Dersleri makalesinde anlattığım rezerve edilmiş karakterler kullanılmamak kaydıyla ilk karakteri alfabetik bir karakter olmak üzere istediğiniz her şey olabilir.

Birçok AutoLISP programcısı değişken isimlerini altı (6) karakter veya daha az sayıda karakterde tutmaya çalışırlar. Bu değişkenlerin AutoLISP’te depolanış şekli ile alakalı bir konudur. Şayet bir değişken ismi altı (6) karakterden daha az sayıda karaktere sahip olursa, AutoLISP bu değişkende değer depolamak için iki (2) noda ihtiyaç duyar. Şayet değişken ismini altı (6) karakterden daha uzun yaparsanız, AutoLISP bir nodda değeri depolarken, diğer nodda işlemci ismini depolar. İsmin kendisi dizge depolama için yığın bölümü olarak bilgisayarın hafızasında depolanır. Yığın alanı sınırlı olduğu için, bazı programcıların bilgisayar hafızasını boş yere doldurmaması için, değişken isimlerini kısa tutması doğru bir uygulamadır.

Sanal hafıza yönteminin geliştirilmesi ve programlarda temizleme işleminin nasıl yapılacağının öğrenilmesi hafıza yetersizliği sorununun çözümü için çok yol kat edilmesini sağlamıştır. Bilgisayarınızdaki hafızanın arttırılması veya AutoCAD’in ihtiyaç duyduğu hafıza miktarı ile ilgili olarak herhangi bir şey yapamam; fakat hafızayı sürekli meşgul etmeyen programları nasıl yazacağınızı öğretebilirim.

Bir değişkeni isimlendirme yeni aldığınız evcil hayvanınıza isim vermeye benzemez. Evcil hayvanınıza görünüşüne uygun sevimli isimler verebilirsiniz; fakat değişkenleri görünüşlerine göre isimlendirmemelisiniz. Değişkenlerinize depolayacakları (değer veya dizge) veri tiplerini esas alarak isimler vermelisiniz. Değişkene ve ismine aynı şekilde bakmalısınız. Şayet değişkeni ne olduğunu ve ne işe yaradığını söyleyemiyorsanız, muhtemelen o değişkene ihtiyacınız yok demektir.

Şayet değişken bir çizginin (başlangıç ve bitiş gibi) önemli noktalarını depoluyorsa, değişken isminde bu belirtilmelidir. Değişken olarak öncelikle hangi çizgi olduğunu belirttikten sonra çizginin hangi noktası olduğunu söyleyin. Değişkenleri doğru veya yanlış olarak isimlendirmek sizin elinizdedir.

Örneğin bir merkez çizgisi için:

Doğru Değişkenler:

MrkCizBas

MrkCizBit

Yanlış Değişkenler:

C1: Merkez çizginin başlangıcı

C2: Merkez çizginin bitişi

Yanlış değişken isimleri ne olduklarının açıklanması için, açıklamaların kullanılmasında daha makul olacaktır; fakat doğru değişken isimleri daha açıklayıcı olup; fazladan açıklama yazmanıza gerek duymazlar. Program yazanlar için açıklamaların kullanımı bazen daha kolay gelmekte olup; bazen de sıkıcı bir iş olur. En iyisi, değişkenlerinizin isimlerini açıklamaya gerek olmayacak şekilde vermektir. Böylece açıklamaları yazarken yapmanız mümkün yazım hataları kafa karışıklığına sebebiyet veremeyecektir.

Ayrıca satır sonundaki açıklamalar her ne kadar düzgün yazılırlarsa yazılsınlar kodu karmaşıklaştırabilir ve okunması güç olurlar. Bu yüzden satır sonu açıklamalarını kullanmaktan kaçınmalısınız.

Bazen aynı tip değerleri depoluyor gibi görünen birçok değişkene sahip olursunuz. Bunlar aynıymış gibi görünseler de, aralarında her zaman bir fark vardır ve doğru olarak vermiş olduğunuz isimler bu farkı size söyleyecektir.

Doğru:

UstKuyuMerkezÇizgiBaşlangıcı

UstKuyMrkCizBas

UstKuyMrkCizBit

UstMerkezÇizgiBaşlangıcı

UstMrkCizBas

UstMrkCizBit

Yanlış:

UKMBA

UKMBİ

UKBA

UKBİ

 

Endeks Değişkenleri


Döngü içerisinde kullanılan endeks değişkenleri bir isim ile belirlenmesi zor olan alanlardan bir tanesidir. Birçok programcı tüm endeks değişkenleri için kullandıkları Endeks, Endx, Ndx gibi genel bir isme sahiptirler. Bu programcılar kodlarını okudukları zaman bu isimlerin ne anlama geldiklerini hemen anlarlar. Şayet endeks değişkenleri için, kısaltma isimler kullanacaksanız, o endeks değişkeninin neyi endeksleyeceğini söylediğine emin olmalısınız.

Doğru:

PointNdx

ListNdx

FileNdx

Yanlış:

x

Idx

Ndx

Bir endeks değişkeni diğer herhangi bir değişken gibi olup; gerçekten ne olduğunun anlaşılabilmesi için, uygun bir isim verilmelidir.

Durum Değişkenleri


Durum değişkenleri için kısaltmalar yerine açıklayıcı isimler verilmelidir. Birçok programcı durum değişkenleri için kısaltmalar kullanmayı tercih etmektedir. Yapmamız gereken ilk şey değişkenleri anlamlı düzgün isimler vermek olmalıdır. Şayet kodumuzda herhangi bir hata varsa ve değişken isimleri olarak kısaltmaları kullanmışsak, kodumuzda hatanın nerede oluştuğunu tespit etmemiz zorlaşacaktır.

Doğru:

DosyaHazır

ÇıktıHazır

SıralamaHazır

Durum değişkenleri AutoLISP programlarında yaygın olarak kullanılmasalar da, şayet siz kullanmayı tercih ederseniz, bu değişkenlere gerçek isimler verin.

İsimlendirme Rehberi


Değişkenler değişkenin amacını ve/veya tipini belirler şekilde isimlendirilmelidir.

GENEL “GLOBAL” Değişkenler


Genel “Global” değişkenler adlarından da anlaşılacağı gibi programın genelinde hatta program çalışmasını tamamladıktan sonra bile hafızada depolanmaya devam eden değişkenlerdir. Bazı programcılar bu değişkenleri yaratırken ön veya son ekler kullanırlar. Örneğin, değişken isminin başına bir g veya g_ harfi ekleyebilirsiniz:

gCivataListesi

Bu ön ek değişkeni programınız içerisindeki tüm fonksiyonlar için bir liste olarak tanımlar. Ben değişken isimlerinde alt tire ( _ ) karakterini kullanmayı tercih edenlerden değilim; bunun yerine değişken isimlerinde kullanmayı düşündüğüm her kelimenin baş harfini büyük harf olarak yazmayı tercih ediyorum.

SABİTLER “CONSTANT”


Sabitler “Constant” değişkenleri tanımlamanın bir yoludurlar. Bunlar kodunuzda tanımlandıkları noktadan kodun sonuna kadar değişmeden aynı değerde kalırlar.

VERİ GİRİŞ “INPUT” Değişkenleri


Veri giriş “Input” değişkenleri bir fonksiyonun parametreleridirler ve fonksiyon içerisinde değiştirilmemelidirler. Şayet herhangi bir değişkenin fonksiyon içerisinde değişme olasılığı varsa, o değişkeni veri giriş “input” değişkeni olarak tanımlamamalısınız. Kodunuzun daha iyi okuyabilmesini sağlamak için,  hangi değişkenlerin parametre olduğunu belirlemek için, bu değişkenlerin isimlerinin önlerine v veya g ön eki koyabilirsiniz.

Sabitler


AutoLISP’te bir sabit “constant” aslında bir değer atadığınız herhangi bir değişkenden başka bir şey değildir ama programınız içerisinde bu sabitin değerini değiştiremezsiniz. Diğer programlama dillerinde AutoLISP ’teki bu sabit “constant” kavramsal ifadesinin yerine “tip” ifadesi kullanılmaktadır. PI değişkeni sabit pi sayısı (3,1428571) değerine ön ayarlı olarak ayarlanmıştır. Sabitler “Constant” kavramı aşina olmanız ve yazacağınız kodlar içerisinde kullanmanız gereken çok güçlü bir araçtır.

Sabitler “Constant” programlarınızda belirli sayıların yerine kullanılmalıdırlar. Belirli sayılar pi sayısının (3,1428571) değeri gibi değişmez sayılardır veya programınız içerisinde sürekli aynı kalacak olan dönüştürme faktörleridirler. Şayet programınız içerisinde hiçbir açıklama yapmadan bu sabitleri kullanırsanız, programınızı okuyan birisi bu sayının ne olduğunu ve program içerisinde ne zaman değişebileceğini anlamada zorluk çekeceği için, bu sabitlere açıklamalar yazmanızı tavsiye ediyorum.

Programımızın yukarı veya aşağı gitmemesi için, programımızın sınır koşullarını belirlemek için, birçok kez sabitler kullanırız. Aşağıdaki örneğimizde, “_MAX” sabiti “constant” bize programımızın ulaşabileceği son sınırın ne olduğunu söylemektedir.

(setq LIST_MAX 10)(if (/= LstNdx LIST_MAX)(bunu_yap))

Yukarıdaki kod maksimum liste sayısını ayarlar ve sonrasında şayet o sayıya ulaşmadıysak, devam etmemizi söyler; o sayıya ulaşana dek bir şeyler (bunu_yap) icra eder.

Değişkenlerin Kullanımı


Değişkenler hangi amaç için kullanılırlar. Bir değişkenin amacı direkt olarak kodun o değişkene ulaşan diğer kısımlarının miktarı ile ilişkilidir. Genellikle değişkenlerinizin amacı ne kadar sınırlı olursa, bu sizin için o kadar iyidir. İşte bu sebeple genel değişkenleri kullanmaktan kaçınmamız gerekmektedir.

Şayet bir değişken geniş kapsama sahip olursa, programınızdaki birçok fonksiyon direkt olarak o kapsamlara ulaşabilir. Değişkenler sadece değişkene ulaşabilen fonksiyonlar tarafından değiştirilebilmelidirler. Bir değişken sadece tek bir fonksiyon veya modül tarafından yaratılabilmeli ve o fonksiyon veya modül değişkene direkt olarak ulaşabilen tek fonksiyon veya modül olmalıdır.

Şayet değişkenlerinizi parametreler listesinin yerel değişkenler kısmında listelerseniz, değişkenin kapsamını sınırlandırmış olursunuz.

(defun my_prog ( / Var1 Var2)

(setq Var1 Var2)

)

Yukarıdaki örnekte, Var1 & Var2 değişkenleri sadece my_prog fonksiyonu için yerel değişkenlerdir. Şayet my_prog fonksiyonu içerisinde başka bir fonksiyon tanımlasaydım, değişkenler o diğer fonksiyon için de ulaşılabilir olurdu.

(defun my_prog ( / Var1 Var2)

(setq Var3 (sub_prog))

(defun sub_prog ( / )

(* Var1 Var2)

)

)

Yukarıdaki örnekte görüldüğü üzere, Var1 ve Var2 değişkenleri sub_prog fonksiyonu için ulaşılabilir değişkenlerdir. Çünkü sub_prog fonksiyonu my_prog fonksiyonu içerisinde tanımlanmıştır. Bu modüllerin yaratılması için temel olup; ilerleyen derslerde detaylı olacak ele alınacaktır. Şimdilik unutmamanız gereken şey, şayet bir değişken parametre listesinde listelenirse, o değişkenin kapsamının listelendiği fonksiyon ile sınırlı olduğudur.

Amaç

Her değişken kullanılmadan önce başlatılmalıdır. Kodun bir noktasında aynı adı taşıyan iki değişken tanımlayabilirsiniz ve değişkeni kullanmadan önce o değişkeni başlatmalısınız.

Program yazarken en iyi yol biraz savunmaya yönelik kod yazmaktır.

Yarattığınız her değişken sadece tek bir amaç için kullanılmalıdır. İki amaç için kullanılabilecek tek değişken tipi endeks değişkenleridir. Şayet aynı endeks değişkenini kodunuz içerisinde iki veya daha fazla sayıda yerde kullandıysanız, değişkenlerinizi veya fonksiyonlarınızı doğru olarak isimlendirmediniz demektir. Endeks değişkenleri parçası oldukları fonksiyonun ismine sahip olmalıdırlar. Bu yöntem size kullanmadan önce başlatmayı unutmanız durumunda değişkeni veri yapısı içerisinde yanlış olarak kullanmaktan koruyacaktır.

Akılda tutulması gereken diğer bir konu da bir değişkenin amacı düşünüldüğü zaman, kodunuz içerisinde tanıttığınız tüm değişkenleri kullandığınızdan emin olmanızdır. Program geliştirilirken bazen fonksiyonların çalışma yöntemini değiştirir ve yeni çalışma yöntemine uyması için, yeni değişkenler bildirirsiniz. Bu durumlarda önce bildirdiğiniz eski değişkenleri temizlemeyi unutmamalısınız.

Genel “Global” Değişkenler

Problemler


Genel değişkenlerin hiçbir zaman kullanılmaması gerektiğini söylemek çok kolay olsa da bazı durumlarda kullanılmaları zorunludur. Öyle durumlar vardır ki, bazı şeyleri sadece genel bir değişken kullanarak yapabilirsiniz. Neyse ki bu tarz durumlar nadirdirler.

Genel Değişkenler kullanımları ile ilişkili birçok probleme sahiptirler. Bu problemlerin hiçbir tanesi diğerinden daha kötü değildir; tümü kötüdür ve kaçınılmaları gereklidir.

Şayet verilerinizi kullanımdan önce başlatmayı basamadıysanız, genel değişken sahip olduğu son değeri size geri döndürecektir. Bu genel endekslerin yanlış olacağı anlamına gelmektedir ki, uzunlukların veya pozisyonların değerleri yanlış olacaktır ve bu yüzden başka bir genel değişkende depoladığınız diğer değer de yanlış olacaktır. Bu yüzden değişkenlerinizin kapsamını sınırlamalısınız.

Genel bir değişken programınız içerisinde herhangi bir fonksiyon tarafından değiştirilebilmektedir. Sadece o anki geçerli (aktif) çizim oturumu bu genel değişkenin kapsamı sınırlandırır.  Bu yükleyebileceğiniz başka programların da o genel değişkeni alıp; değişkenin değerini sıfırlamadan kullanabileceği anlamına gelir. Bu yüzden bir programın başka bir program üzerinde etkili olmasına hiçbir zaman izin vermemelisiniz. Bu yüzden benim yazdığım programlarda değişkenleri fonksiyona özel tutarım. Şayet programım içerisinde değişkenlerimi bir fonksiyona veya modüle özel tutarsam, o fonksiyonu veya modülü dışarı çekebilir ve başka programlarda da kullanabilirim. Bu kod tekrar kullanma yöntemi size programlamada çok büyük üretkenlik sağlayacaktır. Kodlarınızı tekrar kullanmaktan kaçınmayın.

İstisnalar

Kod yazarken bazı noktalarda genel değişkenlerin kullanımı gerekli olacak ve bu değişkenleri kullanmak zorunda kalacaksınız. Genel değişkenleri kullanmanın en önemli sebeplerinden bir tanesi ön tanımlı değerleri programlarınıza aktarmaktır. Şayet programınızı AutoCAD komutları gibi yerleşik yapmak için kodluyorsanız, ön tanımlı değerleri programınıza aktarmanız gereklidir. Genel Değişkenleri veya bir harici dosyayı kullanma programınızın ilk çalışmasında elde edilen değerleri programınızın sonraki çalışmasına kaydetmek için, iyi bir yoldur.

Bunu yapmak için, başka bir yol yoktur ve genel verilerin kullanımından kaçınılmalıdır. AutoCAD artık birçok sürümünde sizin için kullanıcı sistem değişkenlerini sunmaktadır ve bu belki de genel değişken sorununu çözmek için, en iyi çözümdür. Bununla birlikte bu diğer programlar kullanıcı sistem değişkenlerini kullanabileceği için, kusursuz bir sistem değildir ve ön tanımlı değerlerinizin üzerine yazacaktır.

Riskleri Azaltma

Şayet genel değişkenleri kullanmak zorundaysanız, problemlerden sakınmak için, yapılabilecek birçok şey vardır. Aşağıdaki yöntemleri kullanarak değişkenlerinizin diğer programlar tarafından kullanılarak üzerlerine yazılma riskini azaltabilirsiniz. Programınızı tüm değişkenleri yerel değişkenler olarak tanımlayarak yazmaya başlayın ve sadece gerekli olduğunda değişkenleri genel değişken olarak tanımlayın. Şayet bir değişkenin kapsamını genişletmek zorunda kalırsanız, değişkeni genel değişken yapmadan önce değişkenin kapsamını modül seviyesine yükseltin. Bu yolla genel değişkenlerin sayısını minimumda tutarsınız.

Genel değişkenleri bariz hale getirmeyi unutmayın. Bu değişkenleri bir bakışta ne olduklarını anlayacak şekilde isimlendirme genel değişkenleri doğru kullanmanın en iyi yoludur. Hatta genel değişkenleri programınızın başlık kısmında bir açıklama notu ile listelemeyi de düşünebilirsiniz. Bu şekilde, şayet bir başkası programınız içerisinde değişiklikler yapmak isterse, hangi değişkenin hangi tip olduğunu kolaylıkla anlayacaktır.

Diğer fonksiyonlardan yerel değişkenlere ulaşımı sağlamak için, ulaşım yordamları (kodları) yazılabilir. Şayet başka bir fonksiyon yerel değişkenlere ulaşma ihtiyacı duyuyorsa, değişkenlerinizi genel değişken olarak tanımlamadan önce ulaşım yordamları (kodları) yazmayı deneyin. Ulaşım yordamı (kodu) herhangi bir seviyede değişkene ulaşmayı kontrol edebilir ve değişkeni değiştirmeden korur. Değişkenlerinizi dışarıdan kaynaklanacak değişikliklerden korumak için, ulaşım yordamınız (kodunuz) içerisine salt okunur “read only” ulaşım seviyesi tanımlayabilirsiniz. Tüm verilerinizi büyük bir yapı altında toplamak ve verilerinize oradan ulaşmak verilerinizi korumaz ve verilerin okunmasını kolaylaştırmaz.  Erişim yordamlarını yazarken, her şeyi tutmak için tek bir büyük kod yapısı oluşturma eğilimi vardır; bu şekilde tüm verilere ulaşmak için yalnızca bir erişim yordamına (koduna) ihtiyaç duyarsınız. Veriler kendisini kullanacak olan modüle özel tutulmalıdır ve verileri herhangi bir modüle almak için, birden fazla ulaşım yordamı (kodu) yazılmalıdır.

Diğer Değişken Hususları


Özel Sayılar

Makalenin başında özel sayılar ile ilgili problemlerden bahsetmiştim; bu konuyu burada daha detaylı incelemenin gerekli olduğunu düşünüyorum. Her hâlükârda özel sayıların kullanımından kaçınılmalıdır. Şayet programınız içerisinde sabit olan sayılar kullanmanız gerekiyorsa, bir sabit değişken kullanın; böylece bunların ne anlama geldiği daha açık olacaktır. Özel sayılar programınıza katacakları değerden çok probleme sebep olurlar.

Çevirme (Dönüştürme)

Birim dönüştürme (çevirme) işlemleri açık olarak yapılmalıdır. Şayet bir tam sayı ve değişken sayı “float” arasında matematik işlemi yaparsanız, AutoLISP tam sayıyı değişken sayıya “float” otomatik olarak çevirecektir. Ayrıca AutoLISP değişken ismine herhangi bir veri tipini atamanıza izin de verecektir. Şayet değişken sayı “float” değerine sahip bir değişkene bir tam sayı atarsanız, yukarıda belirttiğim bu iki özelliğin bir araya gelmesi sorunlara neden olabilir.

Şayet bir tam sayıyı bir değişken sayıya “float” bölerseniz, bir değişken sayı “float” elde edersiniz. Şayet bir tam sayıyı bir tam sayıya bölerseniz, bir tam sayı elde edersiniz ve bu şayet bir değişkene tam sayı değeri atarsanız, o değişken bir değişken sayı “float” gibi davranır ve dönen değer yanlış bir değer olacak olan tam sayı olacaktır anlamına gelir.

Değişkenlere değişken noktasal sayılar “float” atarken, her zaman takip eden sıfır (0) rakamlarını kullanın. Bu yöntem ile değişken noktasal sayıların “float” elde edilmesini garanti etmiş olursunuz ve programınızın doğru değerleri elde etmesini sağlarsınız. FIX fonksiyonu ilkel veri tiplerinden biri olan değişken sayıyı “float” bir tam sayıya dönüştürürken; FLOAT fonksiyonu bir tam sayıyı ilkel veri tiplerinden biri olan değişken sayıya “float” dönüştürecektir.

Dizgeler

Şayet programınız içerisinde birçok kez kullanılan bir dizgeye sahipseniz, bu dizge bir değişkene kaydedilebilir ve her seferinde dizgenin tamamını yazmak yerine o değişken kullanılabilir. Bu değişkenleri programınızın ismi ve olası hata mesajları için kullanabilirsiniz. Böylece programınızın ismini değiştirmeyi ve hata mesajlarını değiştirmeyi tek bir yerden sağlayabilirsiniz.

Özet


Bu makale için bu kadar bilginin yeterli olduğunu düşünüyorum. Sizin de gördüğünüz gibi, değişkenler oldukça önemlidirler ve kod yazarken değişkenleri çok iyi düşünüp planlamak zorundayız. Değişkenleri gelişi güzel kullanmayın ve programınız içerisindeki değişkenlerin tümünü genel “global” değişkenler olarak tanımlamayın. Emin olun değişkenler ilave dikkat ve ihtimam göstermeniz için, program içerisinde yeteri kadar önemlidirler.

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Görüş Aralığını Kullanma (Video)

Revit’te bir modeldeki öğeleri düzgün şekilde görüntülemek için, Görüş Aralığının “View Range“ düzlemlerini ayarlayın. Bu …

Bir cevap yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Yardıma mı ihtiyacınız var? Chat with us
Bir görüşme başlatmak için lütfen önce gizlilik politikamızı kabul edin.