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 Tanımı: Varsayılan olarak her şeyin bir dize olduğu, dize tabanlı bir betik ve prosedür dili.
  • ▶ ️ yürütme: Tclsh kabuğu aracılığıyla Tcl komut dosyalarını çalıştırın. Windows veya .tcl uzantılı dosyalarla Linux.
  • 🔄 Oyuncu değişikliği: Komut (köşeli parantez), değişken ($) ve ters eğik çizgi yerine geçme işlemlerini destekler.
  • ???? Değişkenler: Oluşturma işlemi set ile yapıldı, okuma işlemi $ ile yapıldı, kaldırma işlemi unset ile yapıldı ve mevcut olup olmadığı info ile kontrol edildi.
  • İfade: `expr` komutu aritmetik, ilişkisel, mantıksal, bit düzeyinde ve diğer operatörleri değerlendirir.
  • 🔀 Akış kontrolü: Karar verme ve döngüler için if/else, switch, while ve for yapılarını sağlar.

TCL/Tk Eğitimi

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:

  1. Windows tabanlı uygulama burada mevcuttur tcltutor.exe dosyası
  2. 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 Eğitimi: Araç Komut Dili

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

  1. Komut ikamesi
  2. Değişken ikame
  3. 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

  1. {} parantezi içinde değişken değişimine izin verilmiyor
  2. 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

SSS

Evet. Tcl hâlâ otomasyon, test, EDA araçları, ağ aygıtı betikleme ve uygulamalara gömme için kullanılıyor. Expect aracı ve birçok test çerçevesi Tcl'ye dayanıyor, ancak yeni web uygulamalarında kullanımı daha az yaygın.

Tcl, betik dilidir, Tk ise grafiksel arayüzler (GUI) oluşturmak için kullanılan yardımcı araç setidir. Tcl/Tk olarak birlikte, basit komutlarla platformlar arası masaüstü uygulamaları yazmanıza olanak tanırlar.

Tcl'de `expr` komutu matematiksel ve mantıksal ifadeleri değerlendirir. Tcl her şeyi bir dize olarak ele aldığı için, aritmetik işlemler, karşılaştırmalar ve mantıksal işlemler gerçekleştirmek için `expr` komutu gereklidir.

Yapay zekâ asistanları Tcl kodu üretebilir, set, puts ve expr gibi komutları açıklayabilir, sözde kodu Tcl'ye dönüştürebilir ve sözdizimi hatalarını ayıklayabilir.ping Yeni başlayanlar dili daha hızlı öğrenirler.

Evet. Yapay zeka araçları Tcl komut dosyalarını aşağıdaki gibi dillere çevirebilir: Python veya Perl, haritaping Komutlar ve kontrol yapıları, ancak geliştiricilerin çıktıyı doğruluk açısından gözden geçirmeleri gerekir.

Bu yazıyı şu şekilde özetleyin: