TCL
Wikipedia
TCL (Tool Command Language) on John Ousterhoutin luoma tulkattava ohjelmointikieli. Sen nimi voidaan lausua englanniksi ”tickle”. TCL:ää pidetään helposti opittavana, mutta silti tehokkaana työvälineenä oikeissa käsissä. TCL:ää käytetään yleensä nopeiden prototyyppien luomiseen, ohjelmien komentosarjakielenä, graafisissa käyttöliittymissä ja testauksessa. TCL on vuoden nuorempi kuin Perl.
Sisällysluettelo |
[muokkaa] TCL:n ominaisuuksia ja ajatusmalleja
- Kielen rakenteet ovat komentoja kuten kaikki muutkin
- Kaiken voi dynaamisesti määritellä uudelleen tai korvata uudella
- Kaikkea voi käsitellä merkkijonona
- Erittäin yksinkertainen syntaksi — vain 11 sääntöä
- Helposti laajennettavissa C:llä, C++:lla, Javalla ja TCL:llä.
- Tulkattu kieli — koodia voidaan luoda ja muokata dynaamisesti
- Täysi Unicode-tuki
- Käyttöjärjestelmästä riippumaton
- Läheinen yhteys graafiseen käyttöliittymään Tk:n kautta.
[muokkaa] Esimerkkejä
”>>”-merkkijono kuvaa ohjelman antamaa tulostetta eikä kuulu TCL:ään.
"#"-merkki rivin alussa on kommenttirivin merkki eli tulkki jättää kyseisen rivin huomioimatta.
Hello word:
puts "Hei, maailma!" >> Hei, maailma!
Yksikkömuotoilija
#!/bin/sh
# the next line restarts using -*-Tcl-*-sh \
exec tclsh "$0" ${1+"$@"}
proc size {data {dec ""} {unit ""} {nobinary false}} { # numeroarvo pakollinen, muut saavat oletusarvot
set i 0
# Tarkistetaan arvot
if { $dec == "" } { set dec 2 }
if { $unit == "" } { set unit B }
if { $nobinary } { set ratio 1000 } else { set ratio 1024 }
# Valitaan oikea etuliite
if { !$nobinary } {
# Binääriset
set units [split "$unit Ki$unit Mi$unit Gi$unit Ti$unit Pi$unit Ei$unit Zi$unit Yi$unit" " "]
} {
# Kymmenkantaiset
set units [split "$unit k$unit M$unit G$unit T$unit P$unit E$unit Z$unit Y$unit" " "]
}
# Etuliitteet pienille luvuille
set small_units [split "m$unit µ$unit n$unit p$unit f$unit a$unit z$unit y$unit" " "]
# Negatiivinen vai positiivinen
if { [expr {$data != [set data [expr {abs($data)}]]}] } { set m - } { set m "" }
# Jaetaan lukua kunnes se on pienempi kuin suhdeluku
while { [expr { $data/pow($ratio,$i) }] >= $ratio } { incr i }
# Jos lukua ei jaettu kertaakaan, niin kerrotaan lukua kunnes se
if { $i == 0 } {
while { ( $data*pow($ratio,-$i) ) < 1 } { incr i -1 }
}
# Muotoilu ja palautus
if { $i >= 0 } { # Onko luku pienempi vai suurempi kuin 1
if { $i < 9 } { # Onko etuliitettä luvulle
return $m[format "%.${dec}f" [expr $data/pow($ratio,$i)]]\ [lindex $units $i]
} {
return $m[format "%.${dec}f" [expr $data/pow($ratio,$i)]]·10^${i}\ [lindex $units 0]
}
} else {
if { [expr { abs($i)-1 }] < 8 } { # Onko etuliitettä luvulle
return $m[format "%.${dec}f" [expr $data/pow($ratio,$i)]]\ [lindex $small_units [expr { abs($i)-1 }] ]
} {
return $m[format "%.${dec}f" [expr $data/pow($ratio,$i)]]·10^(${i})\ [lindex $units 0]
}
}
}
puts [size 12341234]
#>> 11.77 MiB
puts [size 12341234 4]
#>> 11.7695 MiB
puts [size 1048576 1 b/s]
#>> 1.0 Mib/s
puts [size 439534 2 m true]
#>> 439.53 km
puts [size 0.00000000043981 2 m true]
#>> 439.81 pm
puts [size 2341234234938248233092330942309320942342342342342342323843423948230948203948029840293840923840238402384029348820.0 20 m 1000]
#>> 2.34123423494000038048·10^37 m
[muokkaa] TCL ja olio-ohjelmointi
Vaikka TCL:ssä itsessään ei ole olio-ohjelmointirajapintaa, sitä voi laajentaa tukemaan uusia ominaisuuksia tarpeen mukaan. Kieleen on tehty monia C-laajennuksia, jotka mahdollistavat olio-ohjelmoinnin, esimerkiksi XOTcl ja incr Tcl. Myös kokonaan TCL:llä tehtyjä olioperustaisia laajennuksia on. Tästä esimerkkinä Snit.
[muokkaa] TCL:ää käyttäviä ohjelmistoja
TCL:ää käyttäviä ohjelmia ovat aMSN, eggdrop, x-chat, XiRCON ja BitchX.
[muokkaa] Aiheesta muualla
- http://www.tcl.tk/
- http://www.activestate.com/ — tarjoaa jakelupakettia
- http://wiki.tcl.tk/ Tcl-wiki
- http://www.tcl.tk/advocacy/tclHistory.html — historiaa
- http://www.tcl.tk/man/tcl8.4/TclCmd/Tcl.htm — 11 sääntöä englanniksi
| Yleisimmät ohjelmointikielet (luettelo) | |||
|
Tuotantokäytössä: Ada | APL | AWK | Assembly | C | C++ | C# | COBOL | Delphi | Eiffel | Fortran | Java | JavaScript | Lua | Lisp | Objective-C | Pascal | Perl | PHP | PostScript | Python | Ruby | Smalltalk | TCL | Visual Basic
|