knowhow superkaramba


Programowanie Superkaramby
KNOW HOW
Powiew świeżości w KDE  SuperKaramba i Python
Python
w rytmie Karamby
SuperKaramba umożliwia wprowa-
dy tylko użyjemy SuperKaramby dokładne określenie, co się ma zdarzyć
[2] do umieszczenia zegara i od- w danej sytuacji.
dzenie interesujÄ…cych zmian w pul-
Gtwarzacza plików MP3 w tle KDE
picie KDE. Aprzy pomocy języka [1], natychmiast zaczniemy myśleć o czymś Czarujący wąż
więcej. Mamy dobrą wiadomość  aby Jeżeli chcemy wykorzystać Pythona do
programowania Pyhton możemy
zwiększyć zakres i funkcjonalność interak- zwiększenia funkcjonalności naszych kom-
tywnych funkcji kompozycji Karamby, mo- pozycji, omówionych pod adresem [1], nie
dokładnie określić stopień dodatko-
żemy użyć języka programowania Python musimy modyfikować istniejącego kodu.
wej funkcjonalności, zgodnie z na- [3]. Możemy na przykład tworzyć menu, Wystarczy, że dodamy kolejny plik do kata-
modyfikować dynamicznie teksty czy też logu z kompozycją. Plik będzie nosił tą sa-
szymi potrzebami.
dodać obsługę przeciągania i upuszczania mą nazwę co kompozycja, a rozpoznawany
do swoich kompozycji pulpitu. będzie dzięki swojemu rozszerzeniu  .py.
HAGEN HÖPFNER
Główny pomysł jest jednak inny  kiedy Programiści SuperKaramby zalecają rozpo-
pojawia się zdarzenie KDE (np. poruszenie częcie pracy z szablonem [6] i jego pózniej-
myszą, uruchomienie programu lub wybór szą modyfikację. Przykładową kompozycję
pozycji menu), program odpowiedzialny za znajdziemy pod adresem [4].
to zdarzenie wysyła informację, która jest Rozpakowujemy dane poleceniem:
odbierana dzięki odpowiedniej funkcji. Su-
perKaramba potrafi dokonywać inter- tar -C ~/.superkaramba -xjvf U
pretacji tego typu zdarzeń. Super- small_text_xmms.tar.bz2
A
P
I
Karamba Python API (czyli in-
terfejs programowy aplika- w katalogu ~/.superkaramba (możliwe, że
cji), opisany szczegóło- będziemy musieli najpierw stworzyć kata-
wo pod adresem [5], log o tej nazwie). Po wykonaniu tego pole-
umożliwia nam cenia utworzony zostanie katalog kompozy-
46 Maj 2004 www.linux-magazine.pl
Programowanie Superkaramby KNOW HOW
cji pulpitu o nazwie small_text_xmms. Ko- zostało pomyślnie załadowane! plikiem z Listingu 1.
piujemy teraz do tego katalogu plik szablo- Aby SuperKaram-
nu template.py. Pamiętajmy o zmianie na- Daje nam to pewność, że plik Pythona zo- ba mogła obsługiwać
zwy szablonu, aby odpowiadała nazwie na- stał prawidłowo przetworzony. kompozycję pulpitu
szej kompozycji: Niestety, nie udało się to w przypadku na- z funkcją przeciąga-
szej instalacji SuSE 9. Przypuszczamy, że nia i upuszczania,
cp template.py U dystrybucja ustawia nieprawidłowo jakieś musimy wykonać je-
~/.superkarambaU zmienne globalne, z których korzysta Py- go inicjalizację. Naj-
/small_text_xmmsU thon. Wpisanie poleceń w konsolę przed uru- lepszą metodą jest
/small_text_xmms.py chomieniem SuperKaramby szybko rozwiÄ…- utworzenie obiektu
w
i
d
g
e
t
zało ten problem: zwanego widget Su-
Z głównego okna SuperKaramby wybiera- perKaramby. Transmi-
my polecenie Open... i otwieramy plik export PYTHONPATH=/usr/libU tuje on sygnał rozpo-
kompozycji small_text_xmms.theme, co spo- /python2.3/ znawany przez jeden
woduje zamianę kodu zródłowego Pythona export PYTHONHOME=/usr/libU ze  wskazników Su-
na pseudokod Pythona (Ramka 1). Jeżeli /python2.3/ perKaramby  jest to tzw. funkcja initWid-
katalog .superkaramba jest niewidoczny, get(), a więc wpisujemy:
w oknie dialogowym wyboru plików naci- Przeciąganie i upuszczanie
skamy klawisz [F8]. Jeżeli na ekranie kom- Naszym pierwszym zwiększeniem możli- def initWidget(widget):
pilator wyświetla informacje o błędzie, za- wości SuperKaramby będzie dołączenie
lecamy ręczne uruchomienie SuperKa- możliwości przeciągania i upuszczania pli- co umożliwi zdefiniowanie odpowiedniej
ramby przez wpisanie w Xterminalu pole- ków .mp3, w sposób opisany pod adresem reakcji w następnej linijce naszej kompo-
cenia superkaramba (będzie też konieczne [1]. Sposób ten umożliwia użytkownikom zycji:
podanie ścieżki dostępu). przeciąganie pliku z przeglądarki Konqu-
Przykładowo, komunikat typu Moje rozsze- eror do zintegrowanego odtwarzacza pli- karamba.acceptDrops(widget)
rzenie Python zostało pomyślnie załadowane!, ków MP3. Obecnie chcielibyśmy, aby od-
można wywołać dopisując polecenie print twarzaniem plików zajmował się XMMS. W tym przypadku chcemy, aby widget ak-
w ostatniej linijce szablonu: Na Listingu 1 pokazano nasze rozwiąza- ceptował porzucone zdarzenia.
nie. Jeżeli nie chcemy korzystać z pliku sza- Do obsługi sygnału SuperKaramba wyko-
print  Moje rozszerzenie Python U blonu, zastępujemy plik small_text_xmms.py rzystuje itemDropped(). Funkcja oczekuje na
dwie części informacji z odrzuconego sygna-
Å‚u, opisanego w Tabeli 1: wskaznik widgeta
Tabela 1: Sygnały wzorcowe SuperKaramby
oraz  w przypadku plików  lista nazw pli-
Funkcja Wywoływana przez
ków zmiennej dropText, w której każda linij-
initWidget(widget) Wywołanie obiektu SuperKaramby.
ka przedstawia pojedynczy plik.
widgetUpdated(widget) Aktualizacja kompozycji. Przedział czasu między aktualizacjami jest określony
w pliku .theme.
Niestety, przed każdą nazwą pliku musi
widgetClicked(widget, x, y, button) Kliknięcie myszą w obrębie kompozycji. x i y oznaczają współrzędne (względem
pojawić się słowo kluczowe file:. Jako że
kompozycji) miejsca, w którym nastąpiło kliknięcie. button określa klawisz myszy,
XMMS nie obsługuje pełnych adresów
który został naciśnięty.
URL typu file:/ścieżka dostępu/do/plik.mp3,
widgetMouseMoved(widget, x, y, button) Ruch myszy w obrębie kompozycji. x i y oznaczają współrzędne (względem
lecz oczekuje na składnię typu /ścieżka do-
kompozycji) miejsca, w którym nastąpiło kliknięcie; button określa numer klawisza
stępu/do/plik.mp3, będziemy musieli usunąć
oraz stan jego przytrzymania.
zbędne informacje z dropText jeszcze
menuItemClicked(widget, menu, id) Wybranie pozycji menu. Przekazuje obsługę menu (patrz uwagi w tekście)
oraz pozycję menu, która została wybrana (id). przed przekazaniem ich do odtwarzacza
menuOptionChanged(widget, key, value) Wybrana pozycja w menu konfiguracji kompozycji. key oznacza obsługę pozycji
multimedialnego.
menu, a value nową wartość (true /prawda/ lub false /fałsz/).
meterClicked(widget, meter, button) Kliknięcie wskaznika wyświetlania. meter oznacza obsługę, button określa numer
Striptiz
naciśniętego klawisza myszy.
Do tego zadania będziemy potrzebowali
commandOutput(widget, pid, output) Wywołanie programu przez executeInteractive(), pod warunkiem, że powoduje to
funkcji zmiany ciągów tekstowych, znajdu-
wyjście do stdout. pid oznacza identyfikator procesu programu, output zawiera
jÄ…cych siÄ™ pod adresem [7] z import string.
tekst wyjściowy.
Kolejnym krokiem będzie zdefiniowanie
itemDropped(widget, dropText) Obiekty (np. ikony) przeznaczone do operacji przeciÄ…gania i upuszczania
w kompozycji. dropText oznacza tekst dla danego obiektu (np. jego URL, patrz
pustej zmiennej xmms_filename='', gdzie
część "Przeciąganie i upuszczanie").
będziemy przechowywać skróconą wersję
startupAdded(widget, startup) Uruchomienie nowej aplikacji przez KDE. Po zakończeniu procedury uruchamiania
listy plików. Następnie możemy wywołać
programu pojawia się sygnał startupRemoved(), a po nim taskAdded().
string.split(), co spowoduje rozdzielenie listy
startupRemoved(widget, startup) Patrz startupAdded().
adresów URL z dropText na elementy skła-
taskAdded(widget, task) Patrz startupAdded().
dowe adresu URL:
taskRemoved(widget, task) Przerwanie pracy programu.
activeTaskChanged(widget, task) Przeniesienie na pierwszy plan innej aplikacji.
string.split(string.rstrip(strU
www.linux-magazine.pl Maj 2004 47
Programowanie Superkaramby
KNOW HOW
(dropText)),'\n')
Kolejnym zadaniem będzie umożliwienie
Jako separatora użyjemy znaku nowej linii programowi XMMS odtwarzania plików
\n. Kolejna funkcja, str(), umożliwia obsłu- MP3, których nazwy zawierają spacje. Do te-
gę zawartości dropText jako ciągu testowe- go celu konieczne jest umieszczenie nazw
go, a string.rstrip() usunie w tym czasie nie- plików w cudzysłowie. Niestety, Python także
standardowe znaki z prawej strony. korzysta z cudzysłowów typu ' do oddzielania
T
eraz, kiedy mamy już poszczególne adre- ciągów znaków, a więc będziemy musieli
sy URL, możemy użyć pętli for w celu usu- opuścić ciąg znaków przy pomocy '\''  jest to
nięcia przedrostka file:. Będziemy je zapisy- dość złożona procedura. Jeżeli zmienna
wać pojedynczo w zmiennej filename, a na- xmms_filename będzie rzeczywiście zawierała Rysunek 1: Python tworzy menu.
stępnie wywoływać cudzysłowy, użycie \ spowoduje, że program
XMMS potraktuje znak ' dosłownie. strukcjami zawartymi na Listingu 2. Z góry
string.split(U Po zachowaniu pierwszej listy w xmms_fi- przepraszamy zawodowych programistów za
g
l
o
b
a
l
v
a
filename, 'file:', 1) lename, możemy skorzystać z sztuczkę ze zmiennymi globalnymi global va-
riables oraz funkcjami selectmenu i my_menu,
r
i
a
b
l
e
s
w celu usunięcia przedrostka file: z nazwy karamba.execute('xmms'U których użyliśmy tutaj dla uproszczenia.
pliku. Mówiąc bardziej szczegółowo, roz- + xmms_filename) Funkcja selectmenu ma początkowo wartość
dzielimy zawartość filename na dwie części 0 i będzie w pózniejszym czasie reprezento-
w pierwszym (1) przypadku separatora file:. aby przekazać do XMMS nakaz wywołania wać identyfikator obiektu menu. my_me-
Gdybyśmy tego nie zrobili, wszystkie pliki nazwy pliku MP3. nu=[[],[]] tworzy strukturę dla listy dwuele-
MP3 zawierające ciąg znaków file: zostały- mentowej. Lista będzie wykorzystana pózniej
by pocięte na drobne kawałeczki. A więc Menu proszę! w programie Python do przypisania pozy-
w rezultacie otrzymujemy listę z dwoma Stworzenie kolejnego menu, uzupełniają- cjom menu przydzielonych identyfikatorów.
wpisami przechowywanymi w innej zmien- cego standardowe rozwijane menu wywoły- W odpowiedzi na otwierające się okno
nej o nazwie temp. Pierwszy element, wane prawym przyciskiem myszy, to kolej- kompozycji, initWidget() dodaje do niej menu:
temp[0], zawiera wyłącznie pusty ciąg tek- ny sposób rozbudowania możliwości kom-
stowy powstały z pierwszej operacji roz- pozycji pulpitu. Może to być menu starto- selectmenu=U
dzielania adresu URL. we, uruchamiane przez dwukrotne klikniÄ™- karamba.createMenu(widget)
Z każdym powtórzeniem pętli dołączamy cie prawym lub środkowym klawiszem my-
nazwę pliku do istniejącej zawartości zmien- szy i umożliwiające uruchamianie dodat- Wewnętrzna liczba przypisana przez system
nej xmms_filename. Jako że nazwa pliku jest kowych aplikacji. Jako że zdefiniowanie jest teraz przechowywana w selectmenu
drugim elementem na naszej liście temp, do- nieskończonej liczby obszarów reagujących zmiennych globalnych. Określamy to nazwą
stęp do konkretnej nazwy możemy uzyskać na kliknięcie myszą w pliku .theme byłoby uchwytu (handle), gdyż liczba identyfikuje
przez temp[1]: nieeleganckie, ograniczymy się tutaj do in- wewnętrznie odpowiednie menu. Nasza
terfejsu API Pythona. konstrukcja przechowuje menu z dwoma
xmms_filename=xmms_filename + U Aby szybko wypróbować ten interfejs, za- pozycjami my_menu. Pierwsza z nich...
' \'' + string.rstrip(U stępujemy zawartość pliku ~/.superkaram-
temp[1]) + '\'' ba/small_text_xmms/small_text_xmms.py in- karamba.addMenuItem(widget, U
selectmenu, 'konqueror', U
'konqueror.png')
Listing 1: Kompozycja obsługuje
przeciÄ…ganie i upuszczanie
...tworzy wpis dla konqueror w selectmenu.
import karamba Ikona konqueror.png, która musi znajdować
import string się w tym samym katalogu, będzie wizuali-
zować nam pozycję menu. Druga pozycja
def initWidget(widget): menu addMenuItem() działa dokładnie tak
karamba.acceptDrops(widget) samo i wykorzystana jest dla przeglÄ…darki
internetowej opera:
def itemDropped(widget, dropText):
xmms_filename="" karamba.addMenuItem(widget, U
for filename in string.split(string.rstrip(str(dropText)),"\n"): selectmenu, 'opera', U
temp=string.split(filename, "file:", 1) 'opera.png')
xmms_filename=xmms_filename + " \"" + string.rstrip(temp[1]) + "\""
karamba.execute("xmms" + xmms_filename) Oczywiście brakuje tutaj najważniejszej
rzeczy  funkcjonalności. Aby przypisać
print "Moje rozszerzenie Python zostało pomyślnie załadowane!" funkcjonalność do właściwych pozycji
menu, potrzebujemy sposobu rozróżnia-
48 Maj 2004 www.linux-magazine.pl
Programowanie Superkaramby KNOW HOW
nia poszczególnych pozycji. Możemy za-
Listing 2: Interakcja za pomocÄ… menu
chować przeglądarki konqueror lub opera
przy pomocy pozycji addMenuItem()
import karamba
z my_menu. Zawartość zmiennych będzie
wyglądała następująco, w zależności od
selectmenu=0
uchwytu (handle):
my_menu=[[],[]]
(['konqueror', -22], U
def initWidget(widget):
['opera', -23])
global selectmenu
global my_menu
Stworzyliśmy zatem menu, ale nie będzie
selectmenu=karamba.createMenu(widget)
ono wyświetlane od razu, lecz po podwój-
my_menu=[
nym kliknięciu myszą w obszarze kompo-
 konqueror , karamba.addMenuItem(widget, selectmenu,  konqueror ,
zycji SuperKaramba; a więc zawsze wtedy,
 konqueror.png )],
gdy wygenerowany zostanie sygnał wid-
['opera', karamba.addMenuItem(widget, selectmenu, 'opera', 'opera.png')]
getClicked(widget, x, y, button).
Nie będziemy teraz oceniać współrzędnych
def widgetClicked(widget, x, y, button):
x-y czy numeru klawisza myszy pozycji button,
global selectmenu
ale gdybyśmy to zrobili, moglibyśmy obsługi-
karamba.popupMenu(widget, selectmenu, x, y)
wać wiele różnych obszarów na wiele różnych
sposobów w zakresie jednej kompozycji, czy
def menuItemClicked(widget, menu, id):
też rozróżniać kliknięcia lewym i środkowym
global my_menu
klawiszem myszy. Moglibyśmy przypisać
for index in my_menu:
funkcję także do prawego klawisza myszy, jed-
if index[1] == id:
nak kliknięcie prawym klawiszem myszy po-
if index[0] == 'konqueror':
woduje rozwinięcie menu SuperKaramby,
karamba.execute('konqueror')
więc jest to możliwość czysto teoretyczna.
elif index[0] == 'opera':
Zauważmy, że kliknięcia myszą będą zawsze
karamba.execute('opera')
wykonywały akcję zdefiniowaną w pliku .the-
me. W naszym przypadku oznacza to, że klik-
print 'Moje rozszerzenie Python zostało pomyślnie załadowane!'
nięcie zegara otworzy zarówno narzędzie usta-
wiania czasu jak i menu (Rysunek 1).
Do wyświetlenia menu na ekranie potrze- danych, menu pojawi się w lewym górnym blem można obejść, przechowując id
bujemy uchwytu (handle), który przechowy- rogu (0,0) kompozycji. w zmiennych globalnych: my_menu dla pozy-
wany jest w zmiennej selectmenu. Aby odczy- Kiedy użytkownik wybiera pozycję menu, cji menu i selectmenu dla samego menu.
tać tę zmienną z globalnej przestrzeni da- SuperKaramba uruchamia funkcję menu- Z przestrzeni danych globalnych będziemy
nych, możemy skorzystać z global selectmenu. ItemClicked(widget, menu, id). Funkcja ta ko- potrzebować wyłącznie main_menu.
Funkcja karamba.popupMenu(widget, selectme- rzysta z id do przydzielenia uchwytu pozycji for index in my_menu: pozwala nam na przej-
nu, x, y) umożliwi wyświetlenie menu o tych menu. Jako że system przydziela uchwyt ście kolejno przez wszystkie elementy zmien-
samych współrzędnych (x, y) co miejsce klik- (handle) przypadkowo, nie ma w zasadzie nej my_menu i przypisanie każdej z list, które
nięcia myszą. Jeżeli będzie brakować tych żadnego sposobu na jego odgadnięcie, pro- się tam znajdują, do zmiennej index. Podczas
SAOWNICZEK
API: Interfejs programowy aplikacji definiuje wyświetlane na ekranie oraz strumień zadaniami. Zamiast bezczynnego oczeki-
wiele funkcji wewnętrznych oprogramowa- stdin dla operacji wejściowych, oznaczają- wania na otwarcie pliku, program wielo-
nia, które mogą wywołać inne programy na- cych zwykle przyjmowanie znaków z kla- wątkowy przypisałby inne zadanie do ko-
pisane w określony sposób. W naszym przy- wiatury komputera. lejnego wątku.
padku aplikacje Pythona mogą korzystać
Widget: Ogólny termin określający ele- Zmienna globalna: Paradygmat progra-
z funkcji umieszczonych w SuperKarambie.
menty sterujÄ…ce interfejsu graficznego. mistyczny, obejmuje funkcje i zmienne
Stdout: Standardowy strumień wyjściowy Mogą to być okna, przyciski, menu, listy obiektów.
określa, dokąd aplikacje Linuksa powinny kontrolne czy zakładki.
Przykładowo, opisanie zmiennej dla koloru
wysyłać swoje tekstowe dane wyjściowe.
Wielowątkowość: Programy zwykle nie przycisku ułatwia tworzenie kolejnych przyci-
Zwykle miejscem tym jest ekran monitora,
są w stanie przeprowadzić kilku czynno- sków w innych kolorach, gdyż zmienna prze-
ale elementem wyjściowym może być rów-
ści w tym samym czasie. Przykładowo, chowywana jest w obiekcie  przycisk .
nie dobrze plik lub drukarka. Poza stdout,
kiedy program oczekuje na otwarcie pli- Zmienne globalne istnieją przez cały czas
system Linux posiada także strumień
ku, nie może on wykonać żadnych innych pracy programu. Jeśli przypiszemy kolor zie-
stderror, umożliwiający przesyłanie komu-
czynności. Wątki dają programowi możli- lony jako kolor przycisku, wszystkie nowo
nikatów o błędach, które mogą być także
wość równoczesnej pracy nad różnymi utworzone przyciski będą miały taki kolor.
www.linux-magazine.pl Maj 2004 49
Programowanie Superkaramby
KNOW HOW
Listingu 1 i 2, tworząc jeden plik, możemy użyć elementu tekstowego, który włączałby
opuścić kilka linijek. Przykładowo, będzie- jakąś funkcję, musimy utworzyć ją w samym
my potrzebować tylko jednej wersji polece- Pytonie przy pomocy funkcji createText(). Ma-
nia import karamba znajdujÄ…cego siÄ™ na po- nipulowanie elementami tekstowymi zdefi-
czątku oraz jednego polecenia print na końcu niowanymi w pliku .theme przy pomocy inter-
pliku. Musimy ponadto połączyć zawartość fejsu API Pythona jest niemożliwe.
bloków  def initWidget(widget): , w celu stwo-
rzenia jednolitej wersji. Jeżeli po załadowa-
INFO
niu kompozycji będzie brakowało jednej
[1] Wstęp do SuperKaramby: Hagen
każdego przejścia musimy sprawdzać, czy sy- z funkcji, kasujemy plik .pyc, który jest auto-
Höpfner,  Karamba na tapecie ,
gnał pozycji menu odpowiada wartości prze- matycznie tworzony w katalogu kompozycji.
Linux Magazine, 3/2004
chowywanej w drugiej pozycji index:
[2] SuperKaramba:
Granice królestwa Pythona
http://netdragon.sourceforge.net
if index[1] == id: Mimo że obsługa tak skomplikowanych za-
[3] Pierwsze kroki z Pythonem:
dań, jak przeciąganie i upuszczanie Pytona
http://www.python.org/doc/Intros.html
Po odnalezieniu pary my_menu odpowiada- SuperKarambie, jest niezwykle prosta i mi-
[4] Przykładowa kompozycja:
jącej klikniętej pozycji, musimy sprawdzić, mo tego, że interfejs API Pythona zapewnia
http://wwwiti.cs.uni-magdeburg.de/
do którego wpisu o przeglądarkach odnosi szereg dodatkowych funkcji, dokładnie
~hoepfner/download.html
się to kliknięcie. Jeżeli jest to przeglądarka udokumentowanych pod adresem [5], poja-
[5] Dokumentacja interfejsu API
Konqueror... wia się jednak kilka problemów z interfej-
dla SuperKaramba Python: http://
sem API. Największym z ich jest fakt, że
netdragon.sourceforge.net/api.html
if index[0] == 'konqueror': nie może on obsługiwać czujników dyna-
[6] Szablon SuperKaramba Python: http://
micznych (1]). Gdybyśmy chcieli dodać do
netdragon.sourceforge.net/template.py
..., uruchomimy tą przeglądarkę wywołując naszej kompozycji funkcję obsługującą
[7] Funkcje manipulowania ciÄ…gami
polecenie karamba.execute('konqueror'); jeśli przełączanie się pomiędzy kilkoma czujni-
tekstowymi: http://www.python.org/
nie  użyjemy polecenia kami, moglibyśmy kliknąć aktualizację za-
doc/2.3.3/lib/module-string.html
wartości testowej, ale nie mielibyśmy już
[8] Pętle i warunki w Pythonie:
elif index[0] == 'opera': wpływu na zamianę wyświetlanych wartości
http://www.python.org/doc/
poszczególnych czujników.
2.3.3/ref/compound.html
dzięki czemu upewnimy się, czy kliknięto Powstaje tutaj kolejny problem. Python po-
[9] Biblioteka Pythona: http://
przeglądarkę Opera. trafi uzyskać dostęp do elementów utworzo-
www.python.org/doc/2.3.3/lib/lib.html
Jeśli połączymy teraz funkcje zawarte na nych przez siebie. Jeżeli jednak zamierzamy
Ramka 1: Czym jest Python?
Jeżeli znasz już jakieś inny język dla niego automatycznie generowany plik z widać na naszych listingach. Wiersze o tym
programowania, nie będziesz zbytnio prz- rozszerzeniem .pyc. Dopiero ten kod jest samym poziomie wcięcia za def należą do
erażony perspektywą konieczności wykonywany przez maszynę wirtualną. definicji tej funkcji.
nauczenia się nowego języka tylko na Python jest jednak dużo szybszy niż Java.
Niestety Python wymaga przynajmniej jed-
potrzeby SuperKaramby. Jednak dla now-
Jeżeli przesiadasz się z innego języka pro- nej funkcji na każdy poziom. Jest to powód,
icjuszy w świecie programowania Python ma
gramowania na język Python, jest jedyna dla którego plik szablonu zawiera funkcję
swoje zalety, ponieważ jest językiem uniwer-
rzecz, do której należy się przyzwyczaić pass zamiast pustego bloku. Funkcja ta nie
salnym. Jedną z głównych przyczyn takiego
 definicja bloków ciągłych. Bloki wykonuje żadnej operacji podczas wykony-
stanu rzeczy jest fakt, że Python łączy w
wykorzystywane sÄ… do definiowania wania programu i jest swego rodzaju
sobie trzy główne podstawy programowania.
instrukcji, które zostaną wykonane w przy- wypełniaczem, który umożliwia wypełnienie
Python może być używany jako język typowo
padku spełnienia określonego warunku. poziomu wymaganą funkcją.
obiektowy, podobnie jak język C++ czy
Język C używa do tego celu nawiasów klam-
Sposób z wcięciem zapewnia elegancką
Java, jako język proceduralny, taki jak Pas-
rowych, w programowaniu powłoki przy
strukturę i łatwość czytania kodu Python w
cal lub C, jednocześnie posiada cechy języka
pomocy interpretera Bash blok instrukcji
porównaniu z innymi językami programowa-
skryptowego, podobnego do PHP czy Perl,
warunkowych if-then można przerwać przy
nia. Może jednak doprowadzać
którego w dodatku nie trzeba kompilować.
pomocy fi. Pascal korzysta ze słów
początkujących programistów do szału,
Ponadto język Python obsługuje dziedzicze-
kluczowych begin i end. Python nie używa
ponieważ funkcja z niewłaściwym
nie wielokrotne, może łączyć się z bazami
żadnej z tych metod - wystarczy zaznaczyć
poziomem wcięcia zostanie pominięta przy
danych, umożliwia dostęp do protokołów
wcięcie bloku instrukcji ciągłych.
przetwarzaniu bloku, w którym powinna
sieciowych i obsługuje programowanie
Zatem dwa występujące po sobie wiersze o zostać wykonana. Zatem pamiętajmy o tej
wielowÄ…tkowe.
tym samym poziomie wcięcia tworzą blok. pułapce przy eksperymentach z przykładami
Podobnie jak Java, kod zródłowy Pythona
Jeżeli drugi wiersz będzie rozpoczynać się i tworzeniu własnych rozszerzeń. No i nie
jest najpierw zamieniany na pseudokod przy
bliżej lewej strony niż wiersz pierwszy, nie zapominajmy o właściwym poziomie wcięć
pomocy kompilatora. Kod pojawia siÄ™ w
będzie on należał do tego samego bloku. dla poszczególnych bloków!
katalogu kompozycji SuperKaramby i jest
Dwukropek rozpoczyna nowy poziom, jak
50 Maj 2004 www.linux-magazine.pl


Wyszukiwarka

Podobne podstrony:
KnowHow SuperKaramba
SuperKid
superkid matematyka 1 02
Rząd Światowy, Globalizm, Antykościół i Superkościół Pierre Virion
KnowHow klastry
2008 07 08 Superkaramba [Poczatkujacy]
Zamien Swoja Pamiec W Superkomputer! Szybka Nauka, Programowanie Mozgu

więcej podobnych podstron