Kekke serietitel dag 1: JavaFX Script nl

Door YopY op dinsdag 29 juni 2010 23:00 - Reacties (6)
Categorie: -, Views: 5.024

Dit is een eerste deel in een nieuwe serie (mogelijk onsamehangende) posts die door mijn andere serie heen gaat (die mogelijk gewoon onderbroken wordt), waarin ik probeer om nieuwe dingen te leren in het gebied van programmeren. Dit voornamelijk omdat ik toch het idee heb dat ik op mijn werk niet veel dingen meer kan leren, en zoals elke werkende Tweakert zou moeten weten: Stilstand is achteruitgang.

Deze blogpost begin ik met wat willekeurige opmerkingen over JavaFX. Ik speelde wat met het idee voor een soort van website beheer applicatie (waarmee je vanuit één applicatie een brede reeks (web) applicaties kunt beheren, details laat ik even achterwege ivm rant-gehalte), maar liep tegen één belangrijk aspect aan: de GUI.

Het is alweer enige jaren geleden dat ik voor het laatst een GUI maakte in Java's Swing, en zoals velen weten is de default Swing look & feel ongelofelijk lelijk, terwijl juist een mooie en vooral ook gebruiksvriendelijke en vlotte applicatie zo belangrijk is tegenwoordig.

offtopic:
App n [Diminutive of "application"] The irrelevant 10 percent of your code lurking beneath, and well-nigh inaccessible from, the glamorous, marketable GUI layer. bron


Dus ik denk, JavaFX is nieuw en voor grafische dingen, misschien kun je er ook goeie GUIs mee maken? Daar komt nog bij dat JavaFX een tijd terug aangekondigd is, maar een stille dood gestorven is - mede dankzij het feit dat nagenoeg tegelijkertijd Microsoft's Silverlight en Adobe Flex uitkwamen,

Maar eerst moet je een stukje leren en kijken wat je ermee kunt doen. Aldus geschiedde.

Men neme: Een X hoeveelheid tijd, een tutorial, een geïnstalleerde NetBeans IDE for JavaFX, en een glaasje water of twee.

Deze post zal voornamelijk over zaken gaan die ik tegenkom in de Getting Started tutorial, in dit geval waarschijnlijk voornamelijk de taal zelf en handigheidjes of dingen die mij opvallen, dus waarschijnlijk zal de rest van deze blogpost bestaan uit willekeurige onsamenhangende opmerkingen.

Men beginne.

Tutorials en copypasta van code

Hm, de tutorial begint met het maken van een project in Netbeans en de instructie "Kopieer deze code"... Ben ik niet zo'n fan van, maar het is voor een persoon met enige ervaring in wat voor programmeertaal dan ook wel te snappen. Zou het voor een beginner echter niet aanraden. Ik had vroegah ook een hekel aan boeken en dergelijke die je een of twee pagina's code voorschotelden met het bericht "Neem dit over, en het wordt niet van je verwacht dat je er geen fluit van snapt, dat wordt allemaal later uitgelegd!1". Tot zover mijn eerste poging Ruby (on Rails).

JavaFX als taal / Strings formatteren

De taal zelf is een stuk eenvoudiger dan Java (en ja, ik ga het voornamelijk daarmee vergelijken), lijkt me iets vlotter te typen. Het plaatsen van variabelwaarden in strings kan ik ook waarderen, da's iets dat me behoorlijk begint te ergeren bij Java.


code:
1
2
3
4
def numOne = 100;
def numTwo = 200;
def result = numOne + numTwo;
println("{numOne} + {numTwo} = {result}");



Ter vergelijking, het Java alternatief zou zijn:


Java:
1
2
3
4
int numOne = 100;
int numTwo = 100;
int result = numOne + numTwo;
System.out.println(MessageFormat.format("{0} + {1} = {2}", numOne, numTwo, result));



Werkt ook, en het zal intern misschien naar iets vergelijkbaars vertaald worden, maar de JavaFX notatie vind ik prettiger - beter op volgorde en dergelijke. Het is natuurlijk wel uitkijken met accolades in je string, ;).

Declaratieve syntax

is wat ze het noemen, blijkbaar. Moet even bijspijkeren wat dat precies is om daar een oordeel over te kunnen vellen. Eerste wat opvalt: types van variabelen en functie return types komen achter de variabele / functiedeclaratie ipv ervoor. Kan me voorstellen dat dit wat logischer is, taalkundig gezien 'functie pietje henk() { return new pietje() };' tegenover functie henk(): pietje. De tweede lees je als "functie henk geeft pietje terug". Alhoewel dit bij variabelen weer minder geldt - ik kan net zo goed zeggen 'nummer piet' als 'piet is een nummer' ( int piet; vs piet: integer). Maar vooruit.

Java functies aanroepen

JavaFX Script en Java zelf zijn dikke matties, en dat blijkt ook uit het volgende voorbeeld: strings parsen naar integers. Volgens de tutorial moet je daarvoor een Java methode aanroepen, en wel als volgt:


code:
1
2
3
4
function run(args : String[]) {
    def numOne = java.lang.Integer.parseInt(args[0]);
    def numTwo = java.lang.Integer.parseInt(args[1]);
}



Da's weer een minpunt - de "fully qualified classname" moeten gebruiken om een functie aan te roepen. Ik zou in dit geval toch de voorkeur geven aan een eenvoudige aanroep naar parseInt(args[0]), waarbij de compiler automagisch aanneemt dat je Integer.parseInt bedoelt. En als 'ie toch hulp nodig heeft, dan toch gewoon integer.parseInt, of anders args[0].toInt();.

Readonly, onlyread, var, def, bind

Oké, JavaFX Script variabelen 101:

* Met 'var' definieer je een variabele.
* Met 'def' definieer je een constante.

Maar hier zijn uitzonderingen op. Ik haat uitzonderingen.

* De enige vars die read-only zijn, zijn diegenen die gedefinieerd zijn met "bind".
* Defs kunnen van waarde veranderen als ze "bound" zijn.

Verwarrend? Vondt ik wel, en ook inconsistent.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Bound vars
var y;
var x = bind y;
println("Is Y read only? {isReadOnly(y)}");
println("Is X read only? {isReadOnly(x)}");
// output:
Is Y read only? false
Is X read only? true

// Bound defs

var a = 1337;
def b = 12;
b = 13; // You cannot change the value of B
def c = bind a;
println(c);
a = a * a;
println(c);

// output
1337
1787569



Lijkt erop dat JavaFX pointers weer hip probeert te maken. Mogelijk zal het doel hiervan zich later openbaren. Vooralsnog lijkt het wat tegenstrijdig. (Spoiler: Heb verderop gezien dat je ook functies aan vars kunt toekennen, dus mogelijk heeft het daarmee te maken).

Spanje wint van Portugal met 1-0, en ik sluit voor vandaag af. Indien dit lichtelijk interresant is zal ik nog wel eens een deeltje twee schrijven, en anders horen jullie nog wel eens van me over een volledig anders onderwerp. Erlang, ofzo, of misschien iets over frustraties van moderne softwareontwikkeling ("ik wil feature X, dat moest gisteren af, in zo weinig mogelijk uren. Nee je krijgt geen tijd om die 7 jaar oude code te gaan refactoren. Watte? Alle primitives worden met objecten gedaan? Huh? Alle data retrieval functies staan in één grote service class en doen allemaal aan het ophalen van een connectie en aanroepen van commit en rollback functies? De fok? Alle DAOs zijn verzamelingen static functies met een bakkes prepared statements? Vector? Wasda?")

Edit: Deel twee is uit :)

Volgende: JavaFX Taalfeatures - Kekke serietitel dag 2 07-'10 JavaFX Taalfeatures - Kekke serietitel dag 2
Volgende: [FGJ] The Value of Social 05-'10 [FGJ] The Value of Social

Reacties


Door Tweakers user Neverwinterx, dinsdag 29 juni 2010 23:22

Gebruik de nieuwe Nimbus look and feel dan.

Door Tweakers user Afvalzak, dinsdag 29 juni 2010 23:28

Vondt ik ook wel
:X

Zelf wil ik ook eens gaan kijken naar JavaFX dus dit is wel zeer interessant om te lezen. :)

[Reactie gewijzigd op dinsdag 29 juni 2010 23:28]


Door Tweakers user wheez50, woensdag 30 juni 2010 04:34

Morgen even beter lezen - ik snap er nu geen fluit van!

Wel vind ik dit interessant! Ik hou mijzelf aanbevolen voor een vervolg...

Door Tweakers user Killemov, woensdag 30 juni 2010 13:43

Hmmm, voor zover ik dit aan de hand van je stukjes code kan beoordelen heb ik het idee dat JavaFX niet zoveel te maken heeft met Java maar meer met JavaScript. Ik had het een beter idee gevonden om de functionaliteit van JavaFX uitsluitend via een Java API beschikbaar te maken. Of mis ik nu iets? De diversiteit aan talen is allang het nuttige voorbij.

Door Tweakers user afraca, woensdag 30 juni 2010 18:00

Maar FGJ word nu alweer op een lager pitje gezet als ik het goed begrijp? Dat zou ik wel beetje tragisch vinden :/

Door Tweakers user YopY, woensdag 30 juni 2010 19:36

Gebruik de nieuwe Nimbus look and feel dan.
Heb ik van gehoord ja (wordt meegeleverd met de nieuwere Java versies), maar dat was nog niet beschikbaar in mijn tijd. Al kan ik niet echt zeggen "Wau dit is geweldig!1" als ik deze screenshot zie.
quote: afvalzak
:x
:o * YopY corrigeert.
quote: wheez50
Morgen even beter lezen - ik snap er nu geen fluit van!
Ik begrijp je, ben niet echt een schrijver van begrijpelijke stukken, :+. Ik had ook een post kunnen schrijven die JavaFX introduceert, maar dan heb ik een beetje het idee dat ik dingen dubbel doe. Ik denk dat ik deel twee van dit meer als een tutorial ga schrijven, dan.
quote: Killemov
Hmmm, voor zover ik dit aan de hand van je stukjes code kan beoordelen heb ik het idee dat JavaFX niet zoveel te maken heeft met Java maar meer met JavaScript. Ik had het een beter idee gevonden om de functionaliteit van JavaFX uitsluitend via een Java API beschikbaar te maken. Of mis ik nu iets? De diversiteit aan talen is allang het nuttige voorbij.
De syntax - en, zoals later zal blijken (stiekem had ik al een volgend hoofdstuk gelezen), ook wel bepaalde features komen inderdaad overeen met Javascript. Men had inderdaad de functionaliteit van JavaFX beschikbaar kunnen maken via een Java API, maar, zoals in de volgende post zal blijken, daarin zijn bepaalde 'slimmigheidjes' qua syntax niet in mogelijk. Ik noem Object Literals, soort van list comprehensions... wacht, lijkt me beter om deel twee te wijden aan 'language features' - een ietwat gerichtere post met een onderzoekseigenschap.
quote: afraca
Maar FGJ word nu alweer op een lager pitje gezet als ik het goed begrijp? Dat zou ik wel beetje tragisch vinden :/
Ik ook, :+. M'n vorige post was niet echt geweldig hierover. Dat ik hier nog niks meer mee gedaan heb komt mogelijk ook doordat ik tegen de volgende stap op zie - requirements opstellen en maken. Maar die kan ik skippen natuurlijk, aangezien het in eerste instantie toch een hobbyproject is, of ik kan korte 'modules' uitwerken (of 'iteraties') en die één voor één implementeren.

Voordat ik met implementeren begin wil ik echter eerst wat onderzoek doen naar de tools die ik voor het project kan gebruiken. Voor webapps ben ik een beetje positief biased tegen Zend Framework (omdat dat goed in elkaar zit, met goeie OO principes e.d.), en negatief tegenover RoR (omdat mijn eerste halfbakken applicatie daarin niet werkte omdat de webserver gereset moest worden om DB settings te herladen maar de host wou niet, :( ), maar ik wil juist een neutraal onderzoek doen naar wat de markt biedt.

Interresant? :p. Een basis hiervoor heb ik twee jaartjes terug al gedaan met een onderzoek (~50+ pagina's) naar webframeworks, maar buiten school is dat nooit echt gekomen. Een herhaling hiervan voor het Grootte Publiek zou niet verkeerd zijn denk ik, ook aangezien ik niet echt goeie vergelijkingen gevonden heb tot nu toe.

Reageren is niet meer mogelijk