lunedì 12 maggio - 04:20
Google
 
Menù
  Home
  Come nasce IRC-Zone
  Glossario Informatico
  Servizio FreeBot
  News
  I nostri progetti
  I nostri servizi
  Partners
  Diventa un Partner

IRC
  Cos'è IRC
  Storia di IRC
  Netiquette su IRC
  Emoticons
  Gergo della chat
  Lista Servers
  RFC 1459
  Shell Hosting

mIRC
  Cos'è il mIRC
  FAQ mIRC
  Configurazione mIRC
  Download mIRC
  Novità
  Script Stranieri
  Script Italiani
  MTS
  MTS Engine

mIRC Addon
  mIRC addon Audio
  mIRC addon SMS
  mIRC addon Grafica
  mIRC addon Utility
  mIRC addon Uso Bot

Client IRC
  Client IRC Linux
  Client IRC Mac
  Client IRC Win

XChat
  Cos'è XChat
  XChat per Win
  XChat per Unix

KVirc
  Cos'è KVirc
  FAQ KVirc
  Installazione su Linux
  KVirc Scripting
  KVirc per Mac
  KVirc per Win
  KVirc per Unix
  KVirc addon

Eggdrop/Windrop
  Cos'è un Eggdrop
  Download Eggdrop
  Configurazione Eggdrop
  Download Windrop
  Installazione Windrop

Tcl
  Download TCL
  Tutorial TCL scripting
  Documenti/Guide

BNC
  Cos'è un psyBNC
  Download psyBNC
  Configurazione psyBNC
  Download sBNC
  Configurazione sBNC

Linkaci!

Credits


Statistiche
Ip: 38.103.63.16
Downloads: 246934 files
Totale: 287836 MB




Art of Scripting vol. 0 - Introduzione al linguaggio

Autore: GrifisxData: 2005-11-15
Modificato: 2005-12-17 Letture: 631
Torna indietroStampa articoloInvia ad un amico

Questo vuol essere una sorta di Start alla programmazione, un sommario delle funzioni, dei comandi e dei costrutti più importanti.
Tradotto e adattato dal manuale originale (quindi tnx to Pragma =D).



Variabili
Variabili Globali
Il nome di una variabile globale è definito tramite il simbolo di percentuale (%), seguito da una lettera maiuscola dalla A alla Z(*), e seguito da una serie di lettere (minuscole o maiuscole) o di numeri o simboli(dalla 'a' alla 'z',dallo '0' a '9','.','_').
Ad esempio:
"%INDICE","%Mio_nick","%Indice","%Articolo" and "%numero_articolo", una variabile globale esiste per l'intera applicazione
Provate a fare:
/%Hello = "Hello world!"
adesso da qualsiasi finestra, o in qualsiasi vostro script, la variabile %Hello esisterà e avrà come contenuto: "Hello world!". Provate in qualsiasi finestra:
/echo %Hello
cosi ve ne renderete conto.

(*) con l'avvento del nuovo parser (disponibile entro la fine dell'anno nella prossima release stabile) le variabili globali dovranno essere dichiarate con il comando global: global %var %var2 %var... Il vecchio metodo rimarrà per compatibilità ma sarà deprecato come uso.

Variabili Locali

Il nome di una variabile locale è definito tramite il simbolo di percentuale (%), seguito da una lettera minuscola dalla a alla z(*), e seguito da una serie di lettere di numeri o simboli('.','_').
Ad esempio:
"%index","%my_nickname","%foo","%bAR1" and "%foo.BAR" Una variabile locale è visibile all'interno del blocco di istruzioni in cui viene creata, ad esempio, in un alias, o all'interno del codice presente in un evento.
Provate a fare:
/%hello = "Hello world!"
e adesso provate in qualsiasi finestra:
echo %hello
il risultato sarà... niente, perché la "vita" della variabile sarà terminata con l'esecuzione del comando. Le variabili si creano assegnando loro un valore e le si distrugge assegnandogli valore nullo, ad esempio:
Creazione:
%nick="Grifisx"
Distruzione:
%nick=""

(*) vale il discorso relativo alle variabili globali: nel nuovo parser saranno locali tutte le variabili non dichiarate nel comando global.

Array
Un array è una collezione di dati variabili indicizzati per numero,
il primo indice dell'array è 0 mentre l'ultimo è uguale alla
grandezza dell'array meno uno (poiché si parte da zero).
Per ottenere il numero di elementi che è contenuto in un array
possiamo usare l'espressione %ArrayEsempio[]#.
Non è necessario dichiarare la grandezza dell'array come in altri
linguaggi di programmazione, a mano a mano che si aggiungerà un
numero, la grandezza del nostro array varierà automaticamente e se il
primo elemento che assegneremo, lo assegneremo ad un indice maggiore
di 0, tutte le posizioni precedenti saranno vuote.
Proviamo ad esempio:

%Array[0]=Grifisx
%Array[1]=Noldor
%Array[2]=Pragma
#Stampo il contenuto di tutto l'array
echo %Array[]
#Stampo la grandezza dell'array
echo %Array[]#
#Stampo solo il primo elemento
echo %Array[0]

Mettiamolo nello script tester ed eseguiamo.
Adesso proviamo questo codice:

%Array[0]=Grifisx
%Array[1]=Non mostrare questo
%Array[2]=Noldor
%Array[5]=Segreto shhhh..
%Array[8]=Pragma
for(%i=0;%i < %Array[]#;%i+=2)echo Entry %i: \"%Array[%i]\";

Come vedete è abbastanza semplice crearsi delle collezioni
indicizzate per numero, cosi come lo è anche muoversi all'interno di
esse, qui si è voluto usare un ciclo for ma ovviamente avremmo anche
potuto usare un foreach(%item,%Array[])echo %item, oppure un ciclo
while.
Un array potremmo anche inizializzarlo in questo modo
%Array[]=$array(Grifisx,Noldor,Pragma,Madero);
ovvero utilizzando la funzione $array([el1],[el2],[el3],[el4],..).
Adesso è il momento di esaminare il fratello maggiore dell'array,
ovvero sia il dizionario.

Dizionario
I dizionari non sono altro che array associativi di stringhe(detto in termini "poveri", array con indice non numerico), per capire bene, riprendiamo l'esempio del manuale ufficiale:

%Songs{Jimi Hendrix} = Voodo child
%Songs{Shawn Lane} = Gray piano's flying
%Songs{Mina} = Brava
%Songs{Greg Howe} = "Full Throttle"
# Mostra tutto in una stringa
echo %Songs{}
# Mostra tutti gli elementi del dizionario
foreach(%var,%Songs{})echo %var

Ovviamente anche qui, come negli array, %Songs{}# restituirà il numero degli elementi del dizionario. Mentre %Songs{}@ restituirà una lista degli elementi separata da virgole.

Operatori
(=) Assegnamento
L'operatore di assegnamento è "=" e funziona come in tutti i linguaggi, alcuni esempi sono i seguenti:
# Assegno alla variabile locale %idx il valore di 0
%idx=0;
# Assegno alla variabile globale %My_Nick il mio nick
%My_Nick = "Grifisx";
# Assegno alla variabile "%nome" il valore ritornato da una funzione
%nome = $function();
# Memorizzo nell'elemento 0 dell'array "%Rubrica" la stringa "start"
%Rubrica[0]="start";

(=~) Binding

Questo operatore è sicuramente per una cerchia più matura di scripters. Serve per fare delle ricerche e sostituzioni all'interno di una stringa, utilizzando anche le regular expression.
Sintassi di base:
[stringa_base] =~ [operazione][parametri]
Dove [operazione] può essere 't','s'.
[stringa_base] è la stringa su cui operare [operazione].
-'t' serve per la sostituzione di lettere.
La sintassi completa è:
[stringa_base]=~t/[CaratteriDaSostituire]/[CaratteriDiSostituzione]/
Questa operazione può essere anche effettuata con 'y' or 'tr' (per preservare la compatibilità con altri linguaggi).
Esempio:

%A=This is a test string
echo %A
%A=~ tr/abcdefghi/ABCDEFGHI/
echo %A

-'s' è per sostituire delle associazioni di lettere.
La sintassi completa è:
[stringa_base]=~s/[pattern_dacercare]/[pattern_concuisostituire]/[flags]
Esempio con regular expression:

%A=This is a test string
echo %A
%A=~ s/([a-z])i([a-z])/\\1I\\2/
echo %A
%A=~ s/([a-z])i([a-z])/\\1@\\2/gi
echo %A

[flags] possono essere una combinazione delle lettere 'g','i' e 'w'.
'g' ->ricerca globalmente non fermandosi alla prima occorrenza del [pattern_da_ricercare].
'i' ->ricerca non case sensitive.
'w' ->ricerca tramite semplice wildcards.

(x=) Operazioni aritmetiche
Sintassi Generale:
[left_operand] [operation] [right_operand]
Dove [left_operand] e [right_operand] devono essere numeri.
Tutte queste operazioni effettuano (che può essere +,-
,*,/,%,|,&amp;) tra l'operatore di destra e quello di sinistra, e quindi
il risultato viene conservato nell'operatore di sinistra ( che deve,
ovviamente, essere una variabile oppure un elemento di un array
oppure di un dizionario).
[operation] può essere:
+= : somma [right_operand] a [left_operand]
-= : sottrae [right_operand] da [left_operand]
*= : moltiplica [left_operand] per [right_operand]
%= : calcola il modulo [right_operand] di [left_operand]
|= : calcola l'OR logico tra [left_operand] e [right_operand]
&amp;= : calcola l'AND logico tra [left_operand] e [right_operand]
/= : divide [left_operand] per [right_operand]
Es:

%A=8
%A+=3
echo %A

(++,--) Operatori di incremento e decremento

Questi due operatori funzionano solo con variabili di tipo numerico.
Sintassi Generale:
[left_operand] [operator]
++ incrementa [left_operand] di una unità
-- decrementa [left_operand] di una unità
sarebbe come fare += 1 oppure -= 1.
ES:

%A=3
%A++
echo %A

Il risultato sarà, ovviamente, 4.
Questi operatori sono utilizzati spessissimo nei cicli come ad
esempio:

%idx=0;
while(%idx==8)
{
echo Valore attuale %idx;
%idx++;
}

(<<,<+,<) Operatori di concatenazione delle stringhe
Operatore <+ :appende l'operando di destra a quello di sinistra in
modo continuo
Operatore << : appende l'operando di destra a quello di sinistra
separandolo da uno spazio.
Operatore <, : simile a '<<' appende separando gli operatori tramite
una ','.
ES:

%frase= Ciao
%frase <, come stai
%frase << ?
echo %frase

Mettiamo sempre nel nostro script tester ed eseguiamo per vedere i
risultati.

Cicli

while
Sintassi:
while(condizione){ comandi };
Il comando while esegue in modo ciclico un comando, o un blocco di [comandi] fino a quando si verifica (o non si verifica) la [condizione]
imposta.
ES:

%i = 0;
while(%i != 10)
{
echo %i;
%i++;
}
echo Fine

Ecco un esempio con un unico comando:
%i = 0;
while(%i != 10) %i++;
echo %i;
Si può interrompere il ciclo con il comando break
I metodi di confronto che posso essere utilizzati sono == (è uguale
a), != (è diverso da), <= (è minore o uguale a ), >= (è maggiore o
uguale a), < (è minore di), (è maggiore di), ![variabile] ( non esiste
es: if(!%nick){comandi} significa: se non c'è la variabile %nick e
quindi non ha un valore), [variabile] (esiste Es: if(%nick){}
significa: se c'è la variabile %nick è ha un valore).
Inoltre si possono usare condizioni multiple concatenandole tramite
&amp;&amp; ( che corrisponde ad un AND logico, ovvero i comandi vengono
eseguiti solo se entrambe le condizioni poste sono vere) oppure
tramite || ( che corrisponde ad un OR logico, ovvero i comandi
vengono eseguiti solo se almeno una delle condizioni è vera).

for
Sintassi:
for([inizializzazione];[condizione];[operazione]){comandi;}
Il ciclo for(;;){} permette l'inizializzazione della variabile che
utilizziamo come indice per ciclare, l'imposizione della condizione
valida per l'esecuzione del ciclo e l'operazione che ci permette di
agire sull'indice, tutto tramite un unico comando complesso.
Si può interrompere il ciclo con il comando break.
ES:

# Con un unico comando
for(%i = 0;%i < 100;%i++)echo %i
for(%i = 100;%i;%i -= 10)echo %i
%i = 0
# Con un blocco di comandi
for(;%i;)
{
echo %i
%i++
if(%i > 10)
break
}

foreach
Sintassi:
foreach([variabile],[[item1][,[item2][,[item3][.....]]]){comando};
Esegue [comando] (che può essere un blocco di comandi racchiuso tra
le {} come per il while e il for), fino a quando può assegnare a [variabile]
un [itemX].
[item] può essere una variabile qualsiasi, un array, un dizionario, o
una funzione che restituisce un valore, o una listza di valori.
ES:

foreach(%i,1,2,3,4,5,6,7,8,9)echo %i

oppure provate semplicemente a fare in una finestra di un canale
/foreach(%nick,$chan.users) echo Utente: %nick
In quest'ultimo caso iIl risultato è giustificato dal fatto che la
funzione $chan.users restituisce la lista dei nick presenti nel
canale separati da virgola.
Per rendervi conto provate uno /echo $chan.users.

Condizioni di controllo
if/else
Sintassi:
if(condizione){comando1}[else {comando2}]

Esegue il [comando] (o il blocco di comandi) se la [condizione] si
verifica, se è utilizzato anche else eseguirà [comando2] (o il
secondo blocco di comandi) se la [condizione] dell'if è falsa.
ES:

%idx=0
while(%idx<=10)
{
if(%idx==3 &amp;&amp; %idx!=6) echo TRE
else echo %idx
if(%idx==6)
{
echo S
echo E
echo I
}
else
{
echo ............
}
%idx++
}

Anche qui come nel ciclo while i metodi di confronto che posso essere
utilizzati sono == (è uguale a), != (è diverso da), <= (è minore o
uguale a ), >= (è maggiore o uguale a), < (è minore di), (è maggiore
di), ![variabile] (non esiste es: if(!%nick){} significa non c'è la variabile %nick e quindi non ha un valore), [variabile] (esiste Es: if(%nick){comandi} significa: se c'è la variabile %nick è ha un
valore).
Inoltre si possono usare condizioni multiple concatenandole tramite
&amp;&amp; ( che corrisponde ad un AND logico, ovvero i comandi vengono
eseguiti solo se entrambe le condizioni poste sono vere) oppure
tramite || ( che corrisponde ad un OR logico, ovvero i comandi
vengono eseguiti solo se almeno una delle condizioni è vera).

switch\case
Sintassi:
switch [-s] ([espression])
{
case(value)[:][command]
[break]
match([wildcard_expression])[:][command]
[break]
regexpr([regular_expression])[:][command]
[break]
default[:][command]
[break]
}
Il costrutto switch è stato arricchito (rispetto al normale costrutto
che si trova nel linguaggio C) da 2 “nuove” etichette, ovvero match()
che ci permette di fare un confronto tramite le normali wildcard
ES:

%nick=Grifisx
switch(%nick)
{
match(*r?fisx)
{
echo Hello Grifisx
break
}
match(*W?fisx)
{
echo who are you?
break
}
}
Poi troviamo il normale case
ES:

%nick=Grifisx
switch(%nick)
{
case(Grifisx)
{
echo Hello Grifisx
break
}
case(WHO)
{
echo who are you?
break
}
}
e infine l'etichetta regexpr che, agli utenti più avanzati di
utilizzare di fare confronti anche utilizzando le regular expression.
Infine lo switch (-s) può essere usato per far si che i confronti non
diventino case sensitive (cioè distinguano maiuscole e minuscole).
/ECHO STOP




Links utili

Newsletter
Iscriviti
Cancellati

Ci sono 57 iscritti

In rilievo..
  JackSMS v3
  Venom Script Lite

Documenti/Guide
  Sicurezza in rete
  Cos'è SSL
  FAQ Bot
  Documenti su IRC
  FAQ Ident
  RFC 2810
  RFC 2811
  IRCx RFC

Informatica libera
  Gli Hoaxes
  Hoaxes report
  Documenti vari
  CensorWare
  Windows
  Linux

mIRC Scripting
  Codice ASCII
  Snippet mIRC scripting
  Tutorial mIRC scripting
  Dll per mIRC
  Utilities

IRCd
  Cos'è un IRCd
  Download Unreal
  Download Hybrid 6
  Download Hybrid 7
  Download Ultimate
  Download Bahamut
  Configurazione IRCd

IRC Services
  Cosa sono i Services
  Download Anope
  Download Epona
  Ircservices 5.0
  Ircservices 5.1
  Configurazione Epona
  Configurazione Anope
  Comandi ChanServ
  Comandi NickServ
  Comandi MemoServ

NeoStats
  Cosa sono i NeoStats
  Download NeoStats
  Configurazione NeoStats
  Download Moduli

IPv6
  Cos'è IPv6
  IPv6 su Win2000
  IPv6 su WinXP
  IPv6 su Linux
  IPv6 su mIRC e Xchat

Programmazione
  Tutorial C++
  Tutorial C
  Compilatori C/C++

Altro
  Contatti
  Banners Gallery

RSS Feed




Progetti
Starlight
Linux

Sponsor
Eushells.net
TradeShell.it
EasyShell.org



©2004+ IRC-Zone | Webmaster | Sitemap
Created by Cesare 'Kaesar83' Lasorella
Designed by Manuel 'erkokki' Cabras
IRC-Zone non è responsabile del contenuto dei siti linkati
Pagina creata in: 0.024 sec con 26 queries