E.L.I.T.E.'s Workshop

4

E.L.I.T.E.'s Workshop

TypeWrapper



TypeWrapper je biblioteka koja služi kao imitacija statičkih tipova u PHP-u. Obzirom da je PHP dinamički tipiziran jezik, promenljiva može u bilo kom trenutku da promeni tip podatka što ponekad (pogotovo u većim projektima) ume da bude vrlo problematično. PHP7 je uveo strict types no to važi samo kod pisanja funkcija, ali ne i kod definisanja novih promenljivih. Ovo je naravno imitacija jer su "tipovi" zapravo samo objekti koji u sebi imaju mehanizme koji im omogućavaju da sadrže samo određene tipove čime se postiže veća kontrola (ali se u isto vreme i uvodi dodatna apstrakcija što je u nekim slučajevima nepoželjno).

Primer koda napisanog sa TypeWrapper bibliotekom:

use TypeWrapper\Foundation\Types\TInt as TInt;

# Kreira TInt objekat sa vrednošću 17.
$age = new TInt(17);

function notMinor(TInt $age) {
    return $age() >= 18;
}

# Vraća false.
notMinor($age);

# Menja vrednost TInt objekta u 21.
$age(21);

# Vraća true.
notMinor($age);

Takođe je moguće i definisanje nizova, kreiranje TType objekata od PHP promenljivih, a planiram i da implementiram pattern matching sličan onom u funkcionalnim jezicima:

TTuple::match($array, [
  [ [$Int, $Int] => $doThis ],
  [ [$Int, $_  ] => $doThat ]
]);

Ne verujem da će ikome biti od neke posebne koristi, ali mi je vrlo drag projekat Smile

[Link mogu videti samo ulogovani korisnici]



SensorUI

Bejah danas nešto obuzet razmišljanjima i pade mi na pamet ideja za JS biblioteku. Praktično u pitanju je biblioteka koja omogućava kreiranje sopstvenih event listener-a. Princip je jednostavan; postoji senzor (element koji sadrži klasičan event listener, tipa onclick, onhover i sl) i primaoci signala koji su navedeni unutar senzora i koji 'osluškuju' i u zavisnosti od primljene poruke preko objekta signala (koji sadrži u sebi poruku kao i kopiju objekta pošiljaoca odnosno senzora koji je signal poslao) odrađuju određenu akciju. To u praksi izgleda ovako:

var sensor1 = new Sensor(document.getElementById('button1')).setName('sensor1');
var textField1 = document.getElementById('text1');
var textField2 = document.getElementById('text2');

sensor1.setReceivers([textField1, textField2])
.addListenerToReceivers('change text', function (sender, receiver) {
    receiver.element.innerText = 'Ovaj element je izmenio senzor \'' + sender.name + '\'.';
});

sensor1.onClick().send('change text').toAll();





Ovde se ne vidi signal, ali je definisan u izvornom kodu biblioteke. Planiram da dodam još interesantnih stvari poput imenovanja primaoca tako da bude moguće nešto ovako:

sensor1.onClick().send('change text').to('textField1', 'textField5');

osluškivanja senzora između sebe, preusmeravanje signala i sl.

Source: [Link mogu videti samo ulogovani korisnici]



Malo sam izmenio strukturu biblioteke ali u suštini to je to; sada svaki primalac ima svoje ime takođe i moguće je slušaoce prikačiti na sve ili samo na određene primaoce, ali i slati signale na isti način Smile

Kod za gornji primer:

var textField = new Sensor(document.getElementById('textField')).setName('textField');

textField.addReceivers({
    'text': document.getElementById('text'),
    'textCount': document.getElementById('textCount')
})

.addListener('change text', function (sender, receiver) {
    receiver.element.innerText = sender.element.value;
}, { to: ['text'] });

.addListener('count chars', function (sender, receiver) {
    receiver.element.innerText = sender.element.value.length;
}, { to: ['textCount'] });

textField.sendOn('change', 'change text', { to: ['text'] });
textField.sendOn('change', 'count chars', { to: ['textCount'] });


Još samo da vidim kako ću da sredim da biblioteka može da se koristi sa različitim module bundler-ima i može da ide na npm.

Ko je trenutno na forumu
 

Ukupno su 904 korisnika na forumu :: 59 registrovanih, 9 sakrivenih i 836 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 20624 - dana 04 Apr 2026 04:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., aleph_one, Aster Blistok, avijacija, Banovo Brdo, Baždaranac, Bobrock1, C-Gun, cyprus, djonsule, djordjemiklusev, djuradj, Dogma21, dolinalima, Dolinc, draganl, Dukelander, elenemste, epsonUSB, eulereix, GaleDJ, HogarStrashni, Jaz, Joja, JOntra, K a s p e r, Kajzer Soze, kib, kingkong1947, Koser, lcc, ljubo70, markolopin, mat, mercedesamg, miroslav milanović, Mićko, N.e.m.a.nj.a., nelezele, Opeshek, pablojepao, partyzan, pein, pfc74, raketaš, S.Palestinac, Salence74, sarma, Sharpshooter, StankoVrankovic, vaci, vathra, vobo, xAlex2, Zastava, ZetaMan, Zmaj Tolak, |_MeD_|, 79693