Scusate il ritardo con il proseguire delle lezioni,ma con tutti i vari impegni,ho dovuto ritardare un pò ^^'
Comunque,ecco finalmente a voi la 4° lezione per apprendere l'RGSS ^^
In questa lezione tratteremo gli operatori,che forse sono la parte più difficile da spiegare,e da apprendere...
Non per questo ci devono spaventare
Spero solo di farvi capire tutto per il meglio,quindi procederò per gradi,spiegandovi:
-Che cos'è un operatore.
-Classificazione degli operatori.
-Precedenza degli operatori.
- Che cos'è un operatore?
In RGSS,gli operatori hanno praticamente la stessa funzione come in matematica...
E' un simbolo che indica al linguaggio di eseguire un'operazione o azione...
Si suddividono in diverse categorie:
• Operatori matematici
• Operatori relazionali
• Operatori logici
• Operatori matematici
Gli operatori matematici,effettuano operazioni quali:addizione,sottrazione,moltiplicazione,divisione,e resto...quindi dispongono di cinque operatori binari...
Ve li elencherò di seguito:
- Addizione + Somma due operandi
- Sottrazione - Sottrae il secondo operando dal primo
- Moltiplicazione * Moltiplica due operandi
- Divisione / Divide il primo operando per il secondo
- Resto % Fornisce il resto della divisione del primo operando per il secondo
Sui primi quattro operatori non ci dovrebbe essere niente da dire,in quanto sono operazioni che tutti noi conosciamo...ma il Resto(%)?
- il Resto fornisce il resto della divisione del primo operando per il secondo. Ad esempio 22%4 vale 2 (cioè il 4 sta cinque volte nel 22 con il resto di 2). Altri esempi possono essere:
50%10 = 0 (ci sta 5 volte con il resto di 0)
40&3 = 1 (ci sta 13 volte con il resto di 1)
...e via dicendo...
Se volete un esempio,aprite l'editor di script in rpgmaker,e andate a visualizzare la classe Window_PlayTime...
Vedrete che l'operatore di resto viene usato per convertire un valore dai secondi alle ore,minuti e secondi.(magari vedremo in una lezione supplementare come fuonziona)
Precedenza degli operatori e uso di parentesi
Le operazioni effettuate in RGSS,hanno delle precedenze ben specifiche...vi faccio un esempio per farvi capire meglio.
Usiamo questo:
Codice: Seleziona tuttox = 10 + 5 * 2
Se eseguiamo prima la somma:
Codice: Seleziona tuttox = 15 * 2
il risultato sarà 30...
Se eseguiamo prima la moltiplicazione:
Codice: Seleziona tuttox = 10 + 10
il risultato sarà 20...
Sono indispensabili delle regole che vincolino l'ordine di esecuzione delle operazioni. Nel Ruby questo ordine, chiamato precedenza degli operatori, è stato definito in maniera molto dettagliata. Ogni operatore ha un proprio valore di precedenza. Quando viene calcolata un'espressione, vengono eseguite prima le operazioni con la più alta precedenza. La tabella seguente elenca i valori di precedenza degli operatori matematici del Ruby; il valore 1 rappresenta la precedenza maggiore, ovvero le operazioni eseguite per prime.
Operatori
* / % ........... 1
+ - ............... 2
Ma se troviamo 1 o più operatori con lo stesso valore di precedenza?
Semplice,le relative operazioni vengono eseguite da sinistra a destra...esempio:
Codice: Seleziona tutto22 % 4 * 2
Questa espressione vale 4 (22 % 4 fa 2, 2 * 2 fa 4)
Quindi,tornando all'esempio precedente,l'istruzione x = 10 + 5 * 2,assegna a x il valore 20 in quanto la moltiplicazione viene eseguita prima dell'addizione.
Ma come si rimedia nel caso in cui l'ordine di precedenza non produce il risultato desiderato? Nell'esempio precedente,se si fosse dovuto sommare 10 e 5 e poi moltiplicare il risultato per 2 si sarebbero dovute impiegare le parentesi per modificare l'ordine di calcolo.
Una sottoespressione racchiusa tra parentesi viene sempre valutata per prima,a prescindere dalle precedenze degli operatori.
Quindi si sarebbe potuto scrivere:
Codice: Seleziona tuttox = (10 + 5) * 2
L'espressione 10 + 5 si trova all'interno delle parentesi e viene valutata per prima,e il risultato memorizzato in x,in questo caso sarà allora 30.
Si possono inserire anche altre parentesi annidate:
Codice: Seleziona tuttox = 22 - (2 * (30 + (4 / 2)))
In questo caso verrà valutata l'espressione più interna,in questo caso 4 / 2 che fornisce il valore 2.
Codice: Seleziona tuttox = 22 - (2 * (30 + 2))
Ora viene valutata l'espressione 30 + 2,che fornisce il valore 32.
Codice: Seleziona tuttox = 22 - (2 * 32)
Quindi viene valutata l'espressione 2 * 32,che fornisce il valore 64.
Codice: Seleziona tuttox = 22 - 64
Infine viene valutata l'espressione 22 - 64,e a x viene assegnato il valore -42.
x = -42
• Operatori relazionali
Gli operatori relazionali vengono utilizzati per confrontare espressioni e rispondere a domande come:
x è più grande di 2?
x è uguale a 1?
y è uguale a 22?
...e via dicendo.
Un'espressione contenente un operatore relazionale viene valutata secondo un valore di verità ,cioè vero (true) o falso (false).
Qui,invece,abbiamo a disposizione sei operatori,elencati di seguito:
Uguale ...................... == .......... x è uguale a y? .................... x == y
Maggiore di ............... > ............. x è maggiore di y? ............... x > y
Minore di ................... < ............ x è minore di y? ................... x < y
Maggiore o uguale a ... >= .......... x è maggiore o uguale a y? ... x >= y
Minore o uguale a ....... <= .......... x è minore o uguale a y? ...... x <= y
Diverso ...................... != ........... x è diverso da y? ................. x != y
Vediamo quest'altra tabella di esempio che indica qualche uso degli operatori:
22 == 20 ........................ 22 è uguale a 20? ....................... 0 (falso)
22 > 20 .......................... 22 è maggiore di 20? .................. 1 (vero)
22 != 20 ......................... 22 è diverso da 20? .................... 1 (vero)
(5 + 15) == (4 * 5) ...... (5 + 15) è uguale a (4 * 5)? .... 1 (vero)
"True" (vero) equivale a "sì", e viene valutato come 1. "False" (falso) equivale a "no" e viene valutato come 0.
Precedenza degli operatori relazionali
Anche gli operatori relazionali hanno delle precedenze,che verranno riportate di seguito:
< <= > >= ... 1
!= == ... 2
• Operatori logici
In alcune situazioni è necessario rispondere a più di una domanda relazionale per volta:ad esempio
Se l'eroe ha gli MP quasi a zero,ed è affetto dallo status confusione,e siamo al 2° turno di battaglia,attiva l'auto pozione
Come possiamo vedere da questo esempio,quindi,gli operatori logici permettono di combinare due o più espressioni all'interno di un unica stessa che viene valutata con una tavola di verità .
Qui di seguito,riporterò i tre operatori logici:
Operatore ..... Simbolo ...... Esempio ............. Significato
and ............... && .............. hp1 && hp2 ...... "E" logico
or .................. || ............... hp1 || hp2 ........ "O" non esclusivo
not ................. ! ................ !hp1 ................... Negazione
Il funzionamento di questi operatori logici viene mostrato qui di seguito:
(hp1 && hp2) --> Vera solo se hp1 e hp2 sono entrambe vere; falsa in qualunque altro caso
(hp1 || hp2) --> Vera se hp1 o hp2 o entrambe sono vere; falsa se e solo se entrambe sono false
(!hp1) --> Falsa se hp1 è vera; vera se hp1 è falsa.
Le espressioni che contengono operatori logici possono essere vere o false,a seconda del valore di verità dei loro operandi.
Inoltre si può usare indifferentemente l'operatore o il simbolo:all'interno dell'RGSS viene utilizzato il nome dell'operatore,poiché rende il tutto più leggibile.
Ecco l'esempio di utilizzo degli operatori logici con il loro nome:
(5 == 5) and (6 != 2) --> Vera, perché entrambi gli operandi sono veri.
(5 > 1) or (6 < 1) --> Vera, perché uno degli operandi è vero.
(2 == 1) and (5 == 5) --> Falsa, perché un operando è falso.
not (5 == 4) --> Vera, poiché l'operando è falso.
Come tutti gli altri,anche gli operatori logici,hanno una propria precedenza:
not : ha un ordine di precedenza tale da dargli una priorità superiore a tutti gli operatori relazionali e a tutti gli operatori matematici binari.
and e or : hanno invece una precedenza molto minore, più bassa di tutti gli operatori matematici e relazionali.
or : and ha una priorità più alta rispetto ad or.
Esempio:
a < b or a < c and c < d
Fare una cosa del genere,però,non è giusto,dato che l'operatore logico and ha una precedenza più alta di or,quindi:
a < b or (a < c and c < d)
Operatori di assegnamento compatti
Gli operatori di assegnamento compatti forniscono un metodo veloce di combinare operazioni matematiche binarie a operazioni di assegnamento.
Ad esempio,supponete di voler incrementare di 22 il valore di x,o in altre parole di voler sommare 22 a x e assegnare il risultato a x.
Possiamo fare così:
Codice: Seleziona tuttox = x + 22
Operatore con assegnamento compatto:
Codice: Seleziona tuttox += 22
Si possono creare degli operatori di assegnamento compatti utilizzando i cinque operatori matematici binari discussi in precedenza.
Ecco alcuni esempi:
x *= y (x = x * y)
y -= z + 1 (y = y - z + 1)
a /= b (a = a / b)
y %= 3 (y = y % 3)
Operatore condizionale
L'operatore condizionale è un operatore ternario:questo significa che lavora su tre operandi separati.
La sua sintassi è la seguente:
Codice: Seleziona tuttohp1 ? hp2 : hp3
Se hp1 è vera,l'intera espressione assume il valore di hp2.
Se hp1 è falsa,l'intera espressione assume il valore di hp3.
Ad esempio,l'istruzione seguente assegna a x il valore 1 se y è vera,mentre se y è falsa assegna a x il valore 100:
Codice: Seleziona tuttox = y ? 1 : 100
Analogamente per assegnare a z il valore più grande tra quelli contenuti in x e y si può scrivere:
Codice: Seleziona tuttoz = (x > y) ? x : y
Questa operazione poteva comunque essere fatta tramite il comodo operatore max spiegato qui di seguito.
Gli operatori max e min
Gli operatori max e min sono operatori binari.
La loro sintassi è la seguente:
Codice: Seleziona tutto[exp1, exp2].max
[exp1, exp2].min
Queste due istruzioni possono essere considerate come due espressioni,il cui risultato è rispettivamente il maggiore o il minore tra exp1 e exp2.
Esempio:
Codice: Seleziona tuttox = [5, 10].max
in questo caso ad x verrà dato il valore 10.
Queste istruzioni possono anche essere annidate:all'interno degli script vengono spesso utilizzate per dare un valore massimo e minimo a una certa variabile.
Se volessimo per esempio fare in modo che gli hp dell'eroe siano al massimo 999 e al minimo 0 potremmo scrivere l'istruzione seguente:
Codice: Seleziona tuttohp_max = [[hp_max, 0].max, 999].min]
Lo script editor considera prima l'espressione più interna [hp_max, 0].max,questa fa in modo che gli hp siano sempre maggiori o uguali a 0,poichè se saranno minori verrà restituito lo 0.
Fatto ciò,l'espressione sarà ridotta alla seguente(supponendo che gli hp siano maggiori di 0):
Codice: Seleziona tuttohp_max = [hp_max, 999].min
E con lo stesso procedimento logico di prima si otterrà un valore minore di 999.
Quindi hp_max è un valore compreso tra 0 e 999.
Tutte le rispettive precedenze spiegate durante la lezione
Ecco un elenco degli operatori di cui abbiamo parlato finora in ordine decrescente di precedenza.
Gli operatori sulla stessa riga hanno la stessa priorità .
1. !
2. * / %
3. + -
4. < <= > >=
5. == !=
6. and (&&)
7. or (||)
8. ?:
9. = += -= *= /= %=
Lezione abbastanza difficile?Ma se volete iniziare a capire gli script,cosa fa una determinata cosa,ecc,dovrete fare questo percorso ^^
Poi ci saranno sicuramente lezioni meno noiosoe e più 'Pratiche'
Esercizio 4
- Risolvi queste operazioni e sistema poi le variabili ottenute in quattro condizioni (seguendo lo schema [variabile] [operatore logico] [variabile] ad esempio a == b) utilizzando questi quattro operatori logici: ==, >, <=, !=;
Due di esse dovranno risultare vere,le altre due false.
a = 45 - 34
b = a == 11 ? 37 : 10
c = 2 + [b, 18].max
d = 3 + 4 * 2
e = d % (c - b)
f = (5 + 6 * (5 * 2 - (10 / 5) + 3))
g = [1, 2].min
12 h = (6 * 5) - f == 23 ? 30 : 15 - (8 + (3 - 6)) * (3 % 2) + ((a - 9) + g * 2 - (8 / 3))
Nella prossima lezione tratteremo:
- Le Condizioni (if, case, unless)
| Copyright © [RGSS/RGSS2]Operatori 2011. All Rights Reserved. |














