Tcl/Tk Eğitimi
⚡ Akıllı Özet
TCL (Tool Command Language), 1989 yılında John Osterhout tarafından oluşturulan, grafik kullanıcı arayüzleri (GUI) ve hızlı prototipleme için yaygın olarak kullanılan, dize tabanlı bir betik ve prosedürel dildir.pingve test etme aşamasında, her değer varsayılan olarak bir dize olarak ele alınır.

TCL nedir?
TCL, TCL komutunu standart girişinden veya bir dosyadan okuyan ve istenen sonuçları veren kabuk uygulamasıdır.
TCL, dize tabanlı bir betik dili ve aynı zamanda prosedürel bir dildir. İlk olarak 1989'da John Osterhout tarafından oluşturulmuştur. Geliştirme amacı...ping Bu dil, uygulamalara kolayca entegre edilebilir. Genellikle grafik kullanıcı arayüzleri (GUI) ve testler için kullanılır. Örneğin, hızlı prototipleme.ping, Test yapmak veritabanı etkileşimi vb. TCL'de varsayılan olarak her şey bir dizedir.
TCL Nasıl Yürütülür
TCL kodunu çalıştırmanın iki yolu vardır:
- Windows tabanlı uygulama burada mevcuttur tcltutor.exe dosyası
- Linux tabanlı uygulama
In Linux etkileşimli tercüman, TCL komut dosyalarını aşağıdaki gibi çalıştırabiliriz
TCL etkileşimli oturumuna erişmek için aşağıdaki komutu çalıştırın
TCL komut dosyaları
TCL programının .tcl uzantılı olması gerekmektedir. UNIX/LINUX'taki her komut dosyası TCL kabuk yoluyla başlar
#!/usr/bin/tclsh
Örnek:-
#!/usr/bin/tclsh Puts "Hello World" Script execution:- $ chmod +x helloworld.tcl $ ./helloworld.tcl
Çıktı: Selam Dünya
TCL'de "Puts" komutu, konsola mesaj yazdırmak için kullanılır. Puts komutunun sözdizimi aşağıdadır.
"?-nonewline? ?channelId? string" yazar.
- Yeni hat yok: Bu isteğe bağlı parametre, varsayılan komut olarak yeni satır karakterini bastırır. Her dizeye yeni bir satır koyar
- Kanal kimliği: Standart giriş kanalı (stdin) ve standart çıkış kanalı (stdout) için kullanılan bu parametre.
Eski:-
%puts "Hello World" % Hello World %puts stdout "Hello World" % Hello World
TCL Oyuncu değişikliği türü
TCL'de üç çeşit oyuncu değişikliği vardır
- Komut ikamesi
- Değişken ikame
- Ters eğik çizgi değişikliği
Tek tek inceleyelim
Komut ikamesi
Komut yerine köşeli parantezler kullanılır.
Örnek:-
% puts [expr 1*3] % 3
Burada önce köşeli parantezler arasındaki komut değerlendirilir. Sonuç döndürülür. Aritmetik hesaplama yapmak için "expr" kullanılır.
Değişken ikame
TCL yardımıyla değişken ikamesi gerçekleştirir $ işaret.
Örnek:-
#!/usr/bin/tclsh set a 10 puts a puts $a
Burada “a” adında bir değişken oluşturup ona “10” değerini ayarlıyoruz.
- puts a : Konsola “a” dizesini yazdırır ancak 'a'nın değerini yazdırmaz
- $a koyar: 'a'nın değerini konsola yazdırır
Çalıştıralım ve doğrulayalım. Çıktıyı aşağıdaki gibi alacaksınız.
$ ./substitution.tcl
a
10
Ters eğik çizgi değişikliği
Tcl'de ters eğik çizgi esca için kullanılır.ping Özel karakterlerin yanı sıra uzun komutları birden fazla satıra yaymak için de kullanılır. Ters eğik çizginin hemen ardından gelen herhangi bir karakter, yerine başka bir karakter yazılmadan kalır. Aşağıdaki örnekte, özel karakter " ", ters eğik çizgiden sonra kaldığını görebilirsiniz.
Bunu bir örnekle doğrulayalım
#!/usr/bin/tclsh puts "This is my \"car\"" $ ./backslashsubstitution.tcl This is my "car"
NOT: -TCL'de herhangi bir dizeye yorum yapmak için “#” kullanılır. “#” işaretinden sonraki tüm karakterler tclsh kabuk komutu tarafından dikkate alınmaz.
TCL Değişkeni
Değişken, bir değer tutan bir tanımlayıcıdır. Başka bir deyişle, değişken, değerin saklandığı bilgisayar belleğine bir referanstır.
Değişkenler “set komutu” ile oluşturulur ve tüm değişken adları büyük/küçük harfe duyarlıdır. Merhaba, Merhaba, MERHABA anlamına gelir TCL'de hepsi farklıdır. Büyük/küçük harfe duyarlı değişken için bazı örneklere bakın.
% set name Techoit % set Name Technoit_1 % set NAME Technoit_2
Çıktı:-
% puts $name % Technoit %puts $Name %Technoit_1 %puts $NAME %Technoit_2
TCL Değişkenleri Oluşturma
TCL'de değişkenler oluşturmak için kullanmanız gerekir "Ayarlamak" komuta
10'u ayarla
Değişkenin değerini elde etmek için aşağıdaki gibi “$” sembolünü kullanmanız gerekir.
% $a koy
% 10
Böylece 'a' değişkeninin değerini 10 olarak alıyoruz.
TCL Komut Bilgisi mevcut
Yukarıda gösterildiği gibi, "set" komutu değişken oluşturmak ve okumak için kullanılır. "unset" komutu bir değişkeni silmek için kullanılır. "info exists" komutu, varName'in geçerli bağlamda bir değişken (veya dizi öğesi) olarak mevcut olup olmadığını kontrol eder ve mevcutsa 1, aksi takdirde 0 döndürür (aşağıdaki örneğe bakın).
TCL'de "info exists", "info functions", "info global" gibi çeşitli "info" komutları bulunmaktadır. Burada "info exists" komutunun bir örneğini göreceğiz.
Eski:-
% set a 20 % puts $a % 20 % puts [info exists a] % 1 % unset a %puts [info exists a] % 0
Farklı diş telleri ve davranışları
{} -> Kıvırcık parantez
TCL'de süslü parantezler, kelimeleri bir araya getirerek argümanlar oluşturur. Süslü parantezler, ertelenmiş bir bloğu tanımlamak için kullanılır; başka bir deyişle, mevcut satırdaki komutun geri kalanından SONRA çalıştırılabilir. Parantez içindeki karakterler, komuta tam olarak yazıldığı gibi iletilir.
Hatırlanması gereken bazı noktalar
- {} parantezi içinde değişken değişimine izin verilmiyor
- Liste veri türünü oluşturmak için kullanılır
Örnek:-
% set x 10 % puts {$x} % $x
%set numarası {1 2 3 4 5} -> Burada sayı bir liste veri türüdür
%$sayıyı koyar
%1 2 3 4 5
[] -> köşeli ayraçlar
Köşeli parantezler iç içe komutlar oluşturmak için kullanılır. Basitçe söylemek gerekirse, bir komutun çıktısı başka bir komuta argüman olarak geçirilir. Köşeli parantezler, geçerli satırdaki komutun geri kalanından ÖNCE çalıştırılacak bir bloğu tanımlamak için kullanılır ve sonuç satıra yerleştirilir.
Eski: -
% set x 10 % puts "y : [set y [set x 10]]" %y : 10 % puts "x : $x" %x : 10
() -> yuvarlak parantezler
Bu komut, dizi veri türünü oluşturmak ve ayrıca operatör önceliğini belirtmek için kullanılır.
% set a(1) 10 % set a(2) 20
Burada “a”, değeri 10 ve 20 olan bir dizidir. Anahtarları, anahtar değer çiftlerini ve dizi değerlerini yazdırmak için aşağıdaki komutlara bakın.
% puts [array get a] -> To print key value pairs we use this command % 1 10 2 20 % puts [array names a] -> To print only keys % 1 2 % puts $a(1) -> To print first value of array % 10 % puts $a(2) -> To print second value of array % 20
a dizisinin “N'inci” değerini yazdırmak için Puts $a(N) kullanacağız.
TCL Komut satırı bağımsız değişkenleri
Komut satırından bir betiğe iletilen veri öğeleri bağımsız değişkenler olarak bilinir. Bir Tcl betiğine komut satırı bağımsız değişkenlerinin sayısı genel değişken olarak iletilir argc. Bir Tcl betiğinin adı, betiğe genel değişken olarak aktarılır argv0ve komut satırı argümanlarının geri kalanı bir liste olarak iletilir. bağımsız değişken.
TCL'nin önceden tanımlanmış 3 değişkeni vardır:
$argc -> indicates the number of arguments passed to the script $argv -> indicates list of arguments $argv0 -> indicates the name of script
Eski:-
arg-script.tcl #!/usr/bin/tclsh puts "number of arguments passed to the scripts : $argc" puts "list of arguments are passed to the script: $argv" puts "the name of scripts is: $argv0"
$ ./arg-script.tcl 10 20 30
çıktı:-
- Komut dosyalarına iletilen bağımsız değişken sayısı: 3
- Betiğe aktarılan argümanların listesi: 10 20 30
- Komut dosyasının adı: arg-script.tcl
TCL İfadesi ve Operator
İfade, işlenenler ve operatörlerden oluşturulur. "expr" komutuyla değerlendirilir. Operators öncelik ve ilişkiselliğe göre değerlendirilir. TCL dili aşağıdaki gibi yerleşik operatörlere sahiptir
| Operator Kategorisi | sembol | Öncelik/İlişkililik |
|---|---|---|
| Aritmetik Operator | + – * / % | Soldan Sağa |
| İlişkisel Operator | == != < > <= >= | Soldan Sağa |
| mantıksal Operator | && || ! | Soldan Sağa |
| Bitsel Operator | & | ^ ~ | Soldan Sağa |
| Üçlü Operator | ?: | Sağdan sola |
| Shift Operator | << >> | Soldan Sağa |
| Dizi Karşılaştırma Operator | denklem ne | Soldan Sağa |
| Üs Operator | ** | Soldan Sağa |
| Liste Operator | ni'de | Soldan Sağa |
Aritmetik Operator
Bir TCL ifadesi işlenenlerin, operatörlerin ve parantezlerin birleşiminden oluşur. TCL'deki Aritmetik operatörlerin örneğini görelim
+ İki veya daha fazla işlenen ekleyin
Eski:-
%set a 10 %set b 20 %puts [expr $a + $b] 30
Alttraciki veya daha fazla işlenen
Eski:-
%set a 20 %set b 10 %puts [expr $a - $b] 10
*İki veya daha fazla işleneni çarpma
%set a 20 %set b 10 %puts [expr $a * $b] 200
/ Payı paydaya böl
%set a 20 %set b 10 %puts [expr $a / $b] 2
% Modül operatörü payı paydaya böler ancak hatırlatıcıyı döndürür
%set a 20 %set b 10 %puts [expr $a % $b] 0
İlişkisel Operator
Sol işlenenin değerinin sağ işlenenin değerinden büyük olup olmadığını kontrol eder. Evetse, koşul doğru olur ve 1 değerini döndürür, aksi takdirde 0 değerini döndürür.
%set a 20 %set b 10 %puts [expr $a > $b] 1
Sol işlenenin değerinin sağ işlenenin değerinden küçük olup olmadığını kontrol edin. Evetse, koşul doğru olur ve 1 değerini döndürür, aksi takdirde 0 değerini döndürür
%set a 10 %set b 20 %puts [expr $a < $b] 1
>= Sol işlenenin değerinin sağ işlenenin değerinden büyük veya eşit olup olmadığını kontrol eder, eğer evet ise koşul doğru olur ve 1 değerini döndürür, aksi halde 0 değerini döndürür
%set a 20 %set b 10 %puts [expr $a >= $b] 1
<= Sol işlenenin değerinin sağ işlenenin değerinden küçük veya ona eşit olup olmadığını kontrol eder, evet ise koşul doğru olur ve 1 değerini döndürür, aksi takdirde 0 değerini döndürür
%set a 20 %set b 10 %puts [expr $a <= $b] 0
!= İki işlenenin değerlerinin eşit olup olmadığını kontrol eder, eğer değerler eşit değilse koşul doğru olur ve 1 döndürür, aksi halde 0 döndürür
%set a 20 %set b 10 %puts [expr $a != $b] 1
== İki işlenenin değerlerinin eşit olup olmadığını kontrol eder, eğer öyleyse koşul doğru olur ve 1 değerini döndürür, aksi halde 0 değerini döndürür
%set a 20 %set b 10 %puts [expr $a == $b] 0
mantıksal Operator
&& Her iki işlenen de sıfırdan farklıysa, koşul doğru olur ve 1 değerini döndürür, aksi halde 0 değerini döndürür
%set a 20 %set b 10 %puts [expr $a && $b] 1
|| İki işlenenden herhangi biri sıfırdan farklıysa, koşul doğru olur ve 1 değerini döndürür, aksi halde 0 değerini döndürür
%set a 0 %set b 10 %puts [expr $a || $b] 1
! Herhangi bir ifadenin sonucunu tersine çevirmek için kullanılır. Çıktıda, 'a' değerinin 0'dan 1'e, 'b' değerinin ise 1'den 0'a dönüştüğünü görebilirsiniz.
%set a 0 %set b 1 %puts [expr !$a] 1 %puts [expr !$b] 0
Bitsel Operator
& (bitsel ve) bit bazında işlem gerçekleştirir ve işlem için aşağıdaki tabloyu takip eder.
| A | B | A ve B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 1 |
| 1 | 0 | 0 |
Eski:-
%set A 10 %set B 20 Follow the sequence to convert decimal to binary number 128 64 32 16 8 4 2 1 10 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 0 1 0 1 0 20 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 1 0 1 0 0 So now as per above tabular rules A & B will be 0 0 0 0 0 0 0 0
| (bit düzeyinde veya) bit bazında işlem yapın ve aşağıdaki tabloyu takip edin
| A | B | bir | B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 1 | 1 |
| 1 | 0 | 1 |
Eski:-
%set A 10 %set B 20 Follow the sequence to convert decimal to binary number 128 64 32 16 8 4 2 1 10 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 0 1 0 1 0 20 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 1 0 1 0 0 So now as per above tabular rules A | B will be 0 0 0 1 1 1 1 0
^ (bit düzeyinde özel veya) bit bazında işlem yapın ve aşağıdaki tabloyu takip edin
| A | B | bir ^ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
| 1 | 0 | 1 |
Eski:-
%set A 10 %set B 20 Follow the sequence to convert decimal to binary number 128 64 32 16 8 4 2 1 10 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 0 1 0 1 0 20 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 1 0 1 0 0 So now as per above tabular rules A ^ B will be 0 0 0 1 1 1 1 0 à 30
~ (bit düzeyinde olumsuzlama) operatörü her 1'i 0'a ve 0'ı 1'e değiştirir, referans olarak tabloyu takip edin
| A | ~A |
|---|---|
| 0 | 1 |
| 1 | 0 |
%set A 7 %puts [expr ~$A] -8
Üçlü Operator ( ? :)
sözdizimi
condition-expression? expression_1: expression_2
Koşul-ifade doğruysa, ifade1 değerlendirilir ve sonuç döndürülür. Koşul-ifadesi yanlışsa, ifade2 değerlendirilir ve sonucu döndürülür. Örneğimizde A'nın değeri 1'dan büyük olduğundan exp6 doğrudur.
%set A 7 %set result [expr $A > 6 ? true : false] %puts $result true
Shift Operator
Shift operatör << sol kaydırma operatörü veya >> sağ kaydırma operatörü ile gösterilir. << sol kaydırma operatörü için, sol işlenenin değeri sağ işlenen tarafından belirtilen bit sayısı kadar sola taşınır.
%set A 7 %set result [expr $A << 2] %puts $result
>> sağa kaydırma operatörü için, sol işlenenin değeri, sağ işlenen tarafından belirtilen bit sayısı kadar sağa taşınır.
%set A 7 %set result [expr $A >> 2] %puts $result
Dizi Karşılaştırma Operator
Dize karşılaştırma operatörü, her iki işlenen değerini karşılaştırır. İşlenen değerleri aynıysa 1, aksi takdirde 0 döndürür. Örnekte, hem A hem de B'nin değeri 7 olduğundan sonuç 1'dir.
Eski:-
%set A 7 %set B 7 %set result [expr $A eq $B] %puts $result 1
Ne (her iki işlenenin değeri farklıysa 1 değerini döndürür, aksi halde 0 değerini döndürür)
%set A 7 %set B 8 %set result [expr $A ne $B] %puts $result 1
Üs alma operatörü
Pow () ve ** her ikisi de aynıdır. Her zaman kayan değer döndürür.
** istenilen işlenenin gücünü gösterir.
Eski:-
%set A 7 %set result [expr $A ** 2] %puts $result 49
Liste Operator
İstenen değer tanımlanan listede bulunursa 1, aksi takdirde 0 döndürür. Örnekte, 'a' değişkeninde 1 değeri mevcut olduğundan 1 döndürülecektir.
set a {1 2 3} if {1 in $a} { puts "ok" } else { puts "fail" } Output: ok
ni, eğer gerekli değer tanımlanmış listede bulunursa 0 değerini döndürür, aksi halde 1 değerini döndürür.
Eski :-
set a {1 2 3} if {1 ni $a} { puts "ok" } else { puts "fail" } Output: fail
TCL akış kontrolü ve karar verme
Bir programın akışını değiştirmek için kullanılan çeşitli akış kontrolü ve karar verme komutları vardır. Program yürütmeleri her zaman kaynak dosyanın üstünden altına doğru başlar.
If ifadesi Boolean ifadesinin ardından bir veya daha fazla ifadeden oluşur.
Eğer… ifadesi
Sözdizimi:-
eğer ifade ?sonra? vücut
eğer ifade doğru olarak değerlendirilirse, komut gövdesi yürütülür.
Eski:-
set age 10 if {$age < 20} { puts "Age is less than 20" } Output: Age is less than 20
Eğer … aksi halde ifadesi
Sözdizimi: -
Eğer ifade? sonra gövde_1 yoksa gövde_2
İfade doğru olarak değerlendirilirse gövde_1 değerini döndürür, aksi halde gövde_2 değerini döndürür
Eski:-
set age 10 if {$age < 20} { puts "Age is less than 20" } else { Puts "Age is greater than 20" } output: Age is less than 20
İç içe if..else ifadesi
Bu, bir if veya else..if ifadesinin başka bir if veya else..if ifadesinin içine yerleştirilebileceği anlamına gelir.
Sözdizimi:-
If {expression_1} { Body_1 If {expression_2} { Body_2 } }
Eski:-
set a 10 set b 20 if {$a == 10} { # if expression_1 is true then it will go to expression_2 if {$b == 20} { #if expression_2 is true then it will print the below string puts "value of a is 10 and b is 20" } } o/p: value of a is 10 and b is 20
Anahtar bildirimi
Switch ifadesi, bir değişkenin bir değerler listesine göre eşitlik açısından test edilmesini sağlar. Değer listesini değerlendirir ve bu değerlendirmenin sonucunu döndürür. Hiçbir değer eşleşmezse varsayılan değerler döndürülür.
Örnek E-posta:
#!/usr/bin/tclsh # switch_cmd.tcl set domain x switch $domain { x { puts "x" } y { puts "y" } z { puts "z" } default { puts "unknown" } }
İç içe anahtar
İç içe switch ifadesi, bir switch ifadesinin içindeki switch ifadesi anlamına gelir.
Sözdizimi :-
switch <switchingstring1> { <matchstring1> { body1 switch <switchingstring2> { <matchstring2> { body2 } ... switch <switchingstringN> { <matchStringN> { bodyN } } }
Örnek E-postaAşağıdaki örnekte, a'nın değeri 100'dür ve aynı kodla b'nin değeri 200 için de switch ifadesi kullanıyoruz. Çıktı hem a hem de b için değeri gösterecektir.
#!/usr/bin/tclsh set a 100 set b 200 switch $a { 100 { puts "The value of a is $a" switch $b { 200 { puts "The value of b is $b" } } } }
Çıktı:-
a'nın değeri 100'dür
b'nin değeri 200
TCL Döngü bildirimi
Döngü ifadesi, bir ifadeyi veya ifade grubunu birden fazla kez çalıştırmaya olanak tanır. Tcl aşağıdaki döngü türlerini sunar.ping ifadesi.
Komut verirken
Belirli bir koşul doğru olduğunda döngü gövdesindeki bir ifade veya ifade grubu tekrarlanır.
Sözdizimi:
While {condition} {
Statements
}
Eski :-
#!/usr/bin/tclsh Set a 10 While {$a < 12} { Puts "a is $a" incr a }
Çıktı:-
a 10'dur
a 11'dur
Yukarıdaki örnekte, "incr" yerleşik komutu kullanılmıştır. Bu, 'a' değerinin maksimum değere (<12) ulaşana kadar 1 artırılacağı anlamına gelir.
Komut için
Bu kod, bir sayaç değerine bağlı olarak bir dizi ifadeyi birden fazla kez yürütür. Sayaç değeri, döngünün her tekrarında otomatik olarak artırılır veya azaltılır.
Sözdizimi :-
For {start} {test} {next} {
Body
}
Örnek E-postaAşağıdaki örnekte 'i' değeri 0 olarak ayarlanmış ve değeri <5 olana kadar artırılmıştır.
#!/usr/bin/tclsh for {set i 0} {$i < 5} {incr i} { put $i }
Çıktı:-
0 1 2 3 4

