EPIC4 Manual



Znaki używane w EpiC4 (w zasadzie są takie same jak w C/C++ oraz częściowo BitchX czy ircII)

Operacje logiczne:

typ 
||alternatywa: (jedno z lub obydwa) (var1 || var2)
&&koniunkcja: (tylko oba naraz) (var1 && var2)
^^dyzjunkcja: (żadne, albo co najwyżej jedno) (var1 ^^ var2)
==równość: (var1 == var2)
!=różnica: (var1 != var2)
>większe: (var1 > var2)
>=większe lub równe: (var1 >= var2)
<mniejsze: (var1 < var2)
<=mniejsze lub równe: (var1 <= var2)


Załóżmy, że mamy tylko zmienną $var1 równą '8' i $var2 równą '2'

@ var1 = 8
@ var2 = 2

if (var1 || var4) {      /* jedna z tych zmiennych istnieje -- $var1, więc ok */
if (var1 ^^ var2) {      /* warunek nie jest spełniony, bo istnieją obie te zmienne */
if (var2 > var1) {       /* warunek nie jest spełniony, bo $var1 > $var2 */
if (var2 != var1) {      /* ok, obie zmienne są różne */



Operacje matematyczne

typ 
+dodawanie
-odejmowanie
*mnożenie
/dzielenie
**potęgowanie

Oczywiście można również używać '()' (nawiasów) w równaniach.


@ :blah = 4
@ :pika = 3
@ :test1 = blah + pika                /*  3 + 4 = 7  */
@ :test2 = blah * (blah + pika)       /*  4 * (3 + 4) = 28  */

Operacje matematyczne można także przeprowadzać 'w locie', bez konieczności operacji na samych zmiennych. Operacje wykonuje się wewnątrz '{ }' (nawiasów klamrowych) poprzedzonych znakiem '$' (dolara). Z tego powodu, użyte wewnątrz zmienne nie wymagają poprzedzania ich nazwy znakiem '$'.


@ :test = 3

/eval echo ${4 + 5}                           /* '9' /*
/eval echo $tdiff(${time() - 1000000000})
                              /* jak dawno temu mineło miliard sekund od 01/01/70 */
/eval echo ${test * 2}                        /* '6' /*

Dodawanie/Odejmowanie

Można to zrobić na kilka sposobów. Każdy z podanych zapisów doda/odejmie do/od zmiennej $ble '1' (jeden). Tylko w pierwszym przypadku możemy ustalić jaką liczbę chcemy dodać/odjąć -- w pozostałych dwóch, $ble będzie zawsze zwiększane/zmniejszane o '1', co zresztą chyba widać na oko.


@ ble = ble + 1             @ ble = ble - 1
@ ble += ble                @ ble -= ble
@ ble++                     @ ble--



Alternatywa

Taki typ zapisu alternatywy (zwany w literaturze fachowej jako tertiary operator lub alternation operator) działa na podobnej zasadzie jak if, tylko że mniej zajmuje i jest szybszy. Zapis jest bardzo prosty, trzeba się tylko do niego przyzwyczaić i chwile nad przykładem podumać.


@ :blah = (warunek)?[tak]:[nie]

Przy użyciu if wyglądałoby to tak:

if (warunek) {
   @ :blah = [tak]
}{
   @ :blah = [nie]
}

W skrócie: Sprawdzamy, czy spełniony jest warunek. Jeżeli tak, to $blah przyjmuje wartość 'tak', gdy nie, to $blah == 'nie'. Przykłady:


@ :blah = (10 > 2)?[Nie widze inaczej]:[Cos pan?]
@ :test = (ischanop($N $C))?[Jestem @]:[Nie mam @]

$blah to napewno 'Nie widze inaczej'
Jeżeli jesteś @ na aktualnym kanale, to $test będzie 'Jestem @'

Inny przykład zastosowania:

echo *** Jestem na ${(rmatch($servername() *.pl))?[polskim]:[zagranicznym]} serverze.

W tym rodzaju zapisu należy uważać, czy nie pojawiają się gdzieś tam ':' (dwukropki) poza rozdzielnikiem alternatyw, gdyż wtedy wszystko sie knoci. Należy wtedy wszystkie inne ':' zacytować (patrz Zasady Cytowania).


Operacje na słowach

typ 
##łączenie
#=dodawanie na końcu
#~dodawanie na początku
=~szukanie pasującego wzoru w innej zmiennej
=!szukanie nie-pasującego wzoru w innej zmiennej

Dla odmiany, na przykładach co się z $test dzieje :-)


@ :test = [Poke] ## [mon]         /* 'Pokemon'   ('Poke' + 'mon') */
@ :test #= [s]                    /* 'Pokemons'   ('Pokemon' + 's') */
@ :test #~ [My ]                  /* 'My Pokemons'  ('My ' + 'Pokemons') */

A zatem, $test to 'My Pokemons'

@ :blah1 = test =~ [*mons*]   /* '1', bo jest jest takie wyrażenie w $test */
@ :blah2 = test =! [*mons*]   /* '0', bo przecież szukamy nie-pasujących, a to tam jest */


Istnieje jeszcze inna metoda wyszukiwania pasujących słów przy pomocy konstrukcji zawierającej '\\[ \\]'. Najprościej zilustuje to taki przykład:


@ pokemons = [Venusaur Ponyta Kadabra Sandshrew Pidgeotto Lickitung]

Dwie metody zapisu tego samego przy użyciu różnych sposobów. Chcemy sprawdzić, czy ktoś używa na kanale nazw Pokemonów.

Metoda pierwsza:

on -public "*" {
   @ :text = [$2-]
   for i in ($text) {
      if (match($i $pokemons)) {
         @ :yes = 1
         break
      }
   }
   if (yes) {echo *** $0 wezwał Pokemona na $1}
}


Metoda druga:

on -public '*\\[${pokemons}\\]*' {echo *** $0 wezwał Pokemona na $1}

Od razu widać która metoda jest lepsza, szysza i odpowidniejsza do tego typu zadania.
Nie rozumiesz przykładu? Zobacz: for, break

Jasne wszystko?



Wstęp Home Następny Paragraf