Nelielais piedzīvojums ar Java

Jānis Rubļevskis (koko) // 2014. gada 14. novembrī, 9:58 // #Datori

Pienācis laiks, kad es lepni varu teikt, ka esmu savā jomā strādājis jau pietiekami ilgi un primāro programmēšanas valodu lietoju jau vairāk kā 10 gadus. PHP esmu iepazinis diezgan pamatīgi, lai arī nekad nevar zināt visu - katru dienu iemācos kaut ko jaunu - vajag tikai gribēt. Tieši tāpat ir arī ar JavaScript.

Arī citas valodas nesmādēju un ik pa laikam pamācos kaut ko savādāku, taču nevar neko normāli iemācīties, ja tam nav pamatīga iemesla. Šoreiz man bija iemesls atkārtot Java zināšanas un es sapratu, ka vairāk ir nezināšana kā zināšana. Tad nu par manu piedzīvojumu.

Brīdinu, ka ar programmēšanu nesaistītiem cilvēkiem diezgan daudz no rakstītā varētu arī nebūt saprotams!!!

Sākšu ar to, ka nu jau esmu pieradis rakstīt kodu, nedomājot par visām blakus parādībām. Tā tiešām ir tikai rakstīšana un ne vairs programmēšana. Tādās valodās kā PHP nav jādomā par mainīgo tipiem, par mainīgo konvertēšanu no viena tipa uz otru (typecasting), jo tas viss notiek automātiski. Nav jāiedziļinās klašu un funkciju tipos. Nav jādomā vispār - tikai raksti savu "smuko" kodu un dzīvo zaļi. Un tad - Java.

Kāpēc?

Iemesls bija ļoti vienkāršs - dabūjām ierīci, kurai solīja līdzi programmējamu API. Tā kā ierīce strādā bezvadu tīklā, tad bijām pārliecināti, ka programmu varēs uzrakstīt tajā pašā PHP un dzīvot laimīgi. Tomēr brīdī, kad to saņēmām fiziski un apskatījāmies API aprakstu, tad atradām tikai tehnisko čipa specifikāciju, kam ar gala produktu ir visai maz kopīgā, JAR arhīvu ar jau sakompilētām Java klasēm, kuras var izmantot (ja saprot, kas un ko dara) un viena entuziasta uztaisītu jRuby wrapperi jau iepriekš pieminētajām Java klasēm.

Tā kā normāli strādājoša bija tikai jRuby programma, tad sakodu zobus un kompilēju to visu pasākumu, iepriekš pat nepalasot, cik ļoti nestabils tas ir un cik maz cilvēku rūpējas par to, lai kaut kas paliktu stabilāks. Vispār esmu jau nez sen sapratis, ka viss, kas saistīts ar Ruby, agrāk nekā vēlāk iespers tev pa dirsu un pārstās strādāt nesaprotamu iemeslu dēļ. Tā nu man tās 52 pakas (tas jRuby pieprasīja vēl 51 paku uzkompilēt) neuzkompilējās un kļūdas paziņojums bija tik "izsmeļošs", ka saprast varēja pilnīgi neko. Ilgi rokoties internetos, par šo tēmu atradu vienu bugreportu, kas tiek ignorēts jau vairāku versiju garumā.

Garo stāstu saīsinu - ķēros pie jRuby wrapera portēšanas uz normālu Javu.

Process

Ātri vien sapratu, ka 1:1 to rubiju noportēt nav nemaz tik viegli, jo daudzas lietas rubijs dara tieši tāpat kā PHP un sevišķi tipu konvertēšanu - viss notiek automātiski. Lielākais grābeklis bija konekcijas statusa monitorēšana, jeb listeneris, kas kompilētajās klasēs bija iebāzts, taču man nebija ne jausmas kā to pārrakstīt. Te nu talkā nāca burvīga programma JD-GUI, kas ir Java dekompilators. Tikai ar tā palīdzību sapratu, ka deviceListener bija implementēts kā abstrakts interfeiss.

Tā kā Javu man ir mācījis tikai cienījamais profesors Pāvels Rusakovs un es dabūju programmēt šajā valodā tikai kādus 4 praktiskos darbus vismaz 8 gadus atpakaļ, tad nekādu lielo priekšzināšanu man nevarēja būt. Dabūju pamācīties nevis tikai par interfeisiem, bet arī par abstraktajiem interfeisiem. Tā nu man tagad ir TO DO listē beidzot kārtīgi izlasīt vismaz par PHP interfeisiem, jo reāli manis izmantotais freimworks tos lieto, bet es pats tajā visā neesmu iedziļinājies.

Otrs lielākais grābeklis bija jau iepriekš pieminētais typecastings, jo listenerim tika padots viena tipa objekts, bet apstrādāt vajadzēja šī tipa klasi papildinošs objekts. Te nu arī palīdzēja tas, ka kodu biju dekompilējis.

Pusotras kārtīgas buršanās un mācīšanās dienas laikā programmu sakompilēju jar failā, kas strādā jebkurā vidē, kas atbalsta vienu no pēdējām javām un iespēju konsolē uzrakstīt java -jar manaProgramma.jar mani daudzie parametri.

Secinājumi

Programmēšanas valodai nav nozīmes - ar manuāļa un gūgles palīdzību var iemācīties ļoti ātri salikt kopā dažādus kodus un uzkodēt vienkāršu programmu, taču, lai uzkodētu kaut ko labu, vajag ilgi un dikti mācīties.

To, kas nu man sanācis, var paskatīties GitHubā. Aicinu pratējus pastāstīt, kā būtu bijis labāk. (Izņemot to, ko varēja vēl izdarīt, jo manā gadījumā bija tikai viens uzdevums - pamainīt ierīces statusu).

P. S. varat izlabot arī README.md kļūdas, jo angliski es rakstu vēl sliktāk kā kodēju Javā :D

Komentāri

Paud savu subjektīvo viedokli:

Visi lauki (izņemot interneta vietni) aizpildāmi obligāti!
E-pasts publiski netiks parādīts.
Zinot vairākumu, komentāros tagi netiek atrādīti kā tagi. Linki automātiski pārveidosies par spiežamiem (cerams).
Bloga īpašnieks patur tiesības ļaunus komentārus dzēst vai pārveidot cilvēkiem patīkamākā formā, bet tajā pašā laikā neatbild par komentāru saturu.