[rant] OMG android

float inputValue = Float.parseFloat(text.getText().toString());

vs

double inputValue = atof(text);

ráadásul az előbb kattintottuk be (egy tutorialt nézegetek) a resources-nál, hogy ez az input csak számokat fogad el.
innen már egyből magától konvertálhatná is. ha már ennyire objektum-orientáltak vagyunk.

Hozzászólások

"ha már ennyire objektum-orientáltak vagyunk"
Java alapon mit vártál...?
--
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." John F. Woods

Get dropbox account now!

Mondjuk simán el tudom képzelni, hogy van jobb megoldás. Nem valami elegáns a kód. Switch-et használ egyetlen egy case-zel. Mi a baj az if-fel? de azért break-el a végén m(
De ez volt linkelve az eclipse oldalról.

--------------------------------------
Unix isn't dead. It just smells funny.

Nem tudtam, hogy csak akkor kérdőjelezhetsz meg bármilyen megoldást is, ha három PHD-d van a témában.
Nekem ez a vogonita software design sosem volt a világom, de akinek tetszik, legyen vele boldog.
Nem betiltottam, csak nemtetszésemet nyilvánítottam a blogomon.

--------------------------------------
Unix isn't dead. It just smells funny.

Nem kell ahhoz 3 PHD, hogy felfogd, hogy a Float.parseFloat() az dob exceptiont helyetted, hogy ha nem érvényes formátumú stringet kapsz át, szemben az atof()-el, ahol még előtte neked külön ellenőrizned kell. (Azt valahogy nagyon sok C kódoló el szokta felejteni, hogy egy Java/.NET végez rengeteg olyan ellenőrzést is, amit sok C kóder szimplán figyelmen kívül hagy, egy kényelmes "úgy se lesz olyan eset" felkiáltással. Aztán, mikor mégis, akkor meg megy a pislogás, hogy fagy a program.)

A .toString() mondjuk tényleg nem tudom, hogy miért kell, igaz nem tudom mit ad vissza a text.getText(). (Bár meglepődnék, ha nem String-et.)

Arról nem is beszélve, hogy jelen esetben te egy vakvilágból kapott char* -t hasonlítasz össze azzal, amikor egy konkrét GUI elemtől kéred el még külön a szöveget. Azt meg nem tudom, mi alapján várod, hogy neked float-ot adjon vissza String helyett.

Az xtoy() függvények meg különösen aranyosak lesznek akkor, mikor lesz vagy néhányszáz adattípusod, ami között konvertálni kell.

Szóval valamennyire igaza van NagyZ-nek: érteni kellene, hogy mit is írsz le és miért nem ugyanaz a kettő.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

"A .toString() mondjuk tényleg nem tudom, hogy miért kell, igaz nem tudom mit ad vissza a text.getText(). (Bár meglepődnék, ha nem String-et.)"

Ha a metódus stringet vár, nem hívódik meg a toString() egyébként is? Mint egyfajta automatikus típuskonverzió.

"Az xtoy() függvények meg különösen aranyosak lesznek akkor, mikor lesz vagy néhányszáz adattípusod, ami között konvertálni kell."

+1

A java nyelvnek fel lehet róni, hogy kevés syntax sugart tartalmaz, emiatt bizonyos esetekben nehezen olvasható kód keletkezik (pl. kilométer hosszú metódusláncolatok), de egy java méretű platform karbantarthatósága namespacek és statikus osztályok nélkül nehezen oldható meg hosszú távon.

"Ha a metódus stringet vár, nem hívódik meg a toString() egyébként is? Mint egyfajta automatikus típuskonverzió."
Nem. Szerintem kevered azzal, hogy a java.io.PrintStream (aminek egy jol ismert peldanya a System.out) printn(Object), println(Object) metodusai belul meghivjak az Object.toString() illetve ennek override-olt metodusat.
Amugy az android TextView.getText() egy CharSequence-t ad vissza, nem Stringet, szerintem azert, mert teljesitmenyben ez jobb: a String immutable osztaly, igy ha 1-1 karakter valtozik uj memoriafoglalasra van szukseg, mig a CharSequence egy read-only interface karaktersorozatokra, de a tenyleges implementacioja lehet mutable.

Amugy a jo megoldas TextWatcher hasznalata.

Ez szimpi. Verbose-ság továbbra sem.
Naiv kérdés: Mitől jobb egy osztályban lévő statikus függvény, mint egy sima függvény? (Mi a racionálé, hogy nincsenek?)
És a parseFloat is csak stringről float-ra konvertál, nem?

Szerk: bocs a támadó hangnemekért, nincsenek jó napjaim
+1 kérdés: mi van, ha nem kapod el az exception-t? Akkor is meghal a progi, nem? file-név + sorszámot ír?

--------------------------------------
Unix isn't dead. It just smells funny.

Mondjuk én nem komálom az Androidot, de nem igazságos az összehasonlítás, hiszen a C-s eleve előnyből indul, gondolom a másiknál egy EditText van, C -snél meg egy string. Szóval inkább:

float inputValue = Float.parseFloat(text);

vs

double inputValue = atof(text);

vs.

float inputValue = [text floatValue]; // (objective-c :)

Olyan nagy különbségek láthatóan nincsenek.

A korrekt osszehasonlitas mondjuk a GTK-val lehetett volna, hiszen az C nyelvu.

Ott ugy tudod ezt megoldani, hogy: van egy GtkTextView-d meg egy GtkTextBuffered.
http://developer.gnome.org/gtk3/3.4/GtkTextView.html
http://developer.gnome.org/gtk3/3.4/GtkTextBuffer.html
Elobb a gtk_text_view_get_buffer() hivassal kapsz egy pointert egy GtkTextBuffer strukturara, amibol egy gtk_text_buffer_get_text() hivassal kapsz egy gchar*-ot, viszont a gchar = char a typedef alapjan.
Na, ezt ezutan kell az atof()-nak beadni.
A gtk_text_view_get_buffer()-nek 1 (maga a GtkTextView pointere), a gtk_text_buffer_get_text()-nek 4 parametere van (a GtkTextBuffer pointere, ket GtkTextIter a kezdo es vegkarakter meghatarozasara, es egy gboolean).

Na, akkor melyik is az egyszerubb?