Warning: Illegal string offset 'name' in [path]/includes/functions.php on line 6439
Jautājums par "eclipses" (un ne tikai) teksta redaktoru
+

thread: Jautājums par "eclipses" (un ne tikai) teksta redaktoru

  1. #1
    Senior Member
    Jun 2006
    Cēsu novads
    974

    Jautājums par "eclipses" (un ne tikai) teksta redaktoru

    Jau kādu laiku rakstu šādas tādas programmas Javā, izmantojot programmēšanas vidi "Eclipse", lai gan videi, šoreiz šķiet nav noteicoša loma, jo lieta, par ko runāšu notiek ne tikai "Eclipsē". Rakstot programmu, tiek veidotas visādas konstrukcijas, piemēram, cikli. Un, kad to dara, tad tās rindiņas, kas atrodas cikla iekšienē, teksta redaktors automātiski pārceļ kādu gabaliņu pa labi, šķiet, ar domu, lai programma būtu ērtāk lasāma. Ja ciklā ir vēl viens cikls, tas tiek pārcelts vēl vairāk pa labi un tādā garā. Bet, rakstot programmu, ņemot gatavus fragmentus un pārceļot tos citā vietā, piemēram pievienojot jau kāda esoša cikla rindiņām, viss skaistums nojūk. Iekopētās rindiņas kādreiz automātiski tiek ieliktas ar pareizo atkāpi, kādreiz jau ir ar citu atkāpi. Un, kad ar programmu ir labu laiku viss kaut kas darīts, intensīvi lietojot copy/paste, tad ar tām atkāpēm ir gatavā putra un programma galīgi vairs nav ērti pārskatāma. Vai eksistē kāds veids, kā to visu ātri sakārtot? Redzu tās atkāpes bezmaz visos programmu piemēros, visādās valodās, izņemot assembleri, tāpēc droši vien visi, kas šajās valodās programmē, jau no dzimšanas zina, kā ar tām atkāpēm rīkoties un tiem būs grūti iedomāties, kā kaut ko tik stulbu var jautāt.

  2. #2
    Moderator
    Jan 2009
    Rīga
    4,371

    Iekš arduino ide iekrāsoju vajadzīgās rindiņas un ar TAB vai Shift+TAB piekoriģēju. Citās IDE jābūt līdzīgi.

    Cēl man patīk triks ar iekrāsotām rindiņām un Ctrl+/ lai aizkomentētu/atkomentētu koda gabalu.

  3. #3
    Senior Member
    Apr 2007
    2,075

    Tas, ko tu apraksti, saucas vienkārši "koda formatēšana". Un visbiežāk attiecīgās IDE (redaktoros) ir fīča autoformatēšanai. Parasti tas strādā tā, ka iezīmē noteiktu koda gabalu (vai visu failu) un tālāk algoritms visu izkārto.

    Piemēram, eclipse: https://stackoverflow.com/questions/15655126/how-to-auto-format-code-in-eclipse


  4. #4
    Senior Member
    Jun 2006
    Cēsu novads
    974

    Liels Paldies! Ctrl+Shift+F darbojas!

  5. #5
    Senior Member
    Jun 2006
    Cēsu novads
    974

    Vēl viens jautājums, kas mani apgrūtina strādājot "Eclipsē":
    Ar laiku programma aug un aug un kļūst arvien nepārskatāmāka. Ir pienācis brīdis, kad kaitinoši daudz laika un pūļu paņem pārvietošanās no viena programmas punkta uz otru. It sevišķi galvenās klases robežās, kas izaugusi milzīga, bet saskaldīt to daudzās mazākās klasēs negribas. Ir lietas, kas jau ir gatavas un gribētu, tās aizvākt prom citā failā, bet kā to izdarīt tā, lai tās tomēr saglabātos tajā pašā klasē un tajā pašā vietā? AVR Studio, programmējot assemblerī to var izdarīt ļoti vienkārši - uztaisa jaunu *.asm failu, piemēram abc.asm , iekopē tajā koda fragmentu, ko grib aizvākt no acīm, bet esošajā failā tā vietā ieliek .include "abc.asm" Gribētu ko tādu "Eclipsē", bet savas dumības dēļ nemāku atrast.

  6. #6
    Senior Member
    Apr 2007
    2,075

    Tas jau iet roku rokā ar programmēšanas labo praksi - kā dali lietas moduļos. Man personīgi jebkurš fails, kurš garāks par 3-4 lappusēm, ir nepārskatāms. Tāda klase, kas izaugusi, ir jādala loģiski sīkāk.

    Taču ne par to ir runa šeit - ja vēlies vienkārši klases metožu implementāciju no .cpp faila sadalīt citos, sīkākos failos, tad tev nekas netraucē izveidot kaut vai 100 .cpp failus, iekļaut tajos attiecīgo klases .h failu un izmētāt metožu implementācijas, kā vien vēlies. Atceries, ka kompilators neko nezina par .h failiem - tam eksistē tikai .cpp faili, un tas jau ir linkera normālais uzdevums, salikt visu kopā.

    Respektīvi, ja klases deklarācija ir klase.h failā

    :
    class A {
        void metode1();
        void metode2();
    };
    Tad implementāciju mierīgi vari taisīt kaut divos failos, klase1.cpp:

    :
    #include "klase.h" // Lai kompilators zinātu klases "aprakstu"
    void A::metode1() {
      // blabla
    }
    Un klase2.cpp tieši tāpat:

    :
    #include "klase.h" // Lai kompilators zinātu klases "aprakstu"
    void A::metode2() {
      // blabla
    }
    Viss. Nav nekādu mistisku noteikumu par .cpp un .h failu nosaukumiem - sauc kā gribi, kaut ciparos. Tiem nav jāsakrīt. Arī viens .cpp no otra nav jāiekļauj - linkeris pats visu sapratīs. Galvenais, ka visi .cpp iekļauj vienu un to pašu klases "aprakstu" jeb deklarāciju.

  7. #7
    Senior Member
    Jun 2006
    Cēsu novads
    974

    Paldies! Tas, ka jādala sīkāk ir skaidrs! Ko arī visu laiku, daru, kad kaut kas izaug par lielu. Kaut gan tik ļoti objekt-orientētā valodā, kā Java katra tāda dalīšana uzreiz rada virkni problēmu, kad lietas, kas vienas klases robežās darās vienkārši, sadalot pa klasēm prasa papildu ņemšanos, lai viss strādātu. Un aiz šā iemesla to dalīšanu atlieku līdz momentam, kamēr būs pilnīgi skaidrs, kā tieši dalīt. Un tā tās klases izaug lielas un grūti pārskatāmas. Nav man vēl intuitīvā līmenī izveidojusies objekt-orientētas valodas sajūta. Rakstot visu laiku stingri jāpiedomā pie virknes lietu, kuras assemblerī ir pavisam citādas, manai uztverei tuvākas. Mēģināšu saprast un pielietot padomus, kaut gan Javā man nav darīšana ar .cpp un .h failiem, bet darbības loģika varētu būt līdzīga.

  8. #8
    Senior Member
    Apr 2007
    2,075

    Ā, ja Tavs jautājums bija par JAVA, tad tur tā nedrīkst darīt, tur gribot negribot ir jādala jaunās klasēs. Es kaut kā automātiski biju pieņēmis C++, jo pats Eclipse esmu tam lietojis.

    Javā arī kaut kā grūti to 3-4 lappušu limitu ievērot

  9. #9
    Senior Member
    Jun 2006
    Cēsu novads
    974

    Tā ir. Kādu brīdi pačakarējos, mēģinot kaut kā sadalīt vienu klasi pa vairākiem failiem, nekas nesanāca. Tādos brīžos liekas, ka izvēloties Javu esmu aizšāvis garām. Toties, kad viena un tā pati programma, pilnīgi bez jebkādām izmaiņām identiski uzvedas gan uz datora ar Windows, gan ar Linux, tajā skaitā arī uz Raspberry, tad Java patīk. Un, šķiet, nekādus dižos pārveidojumus nevajadzētu veikt, lai palaistu to arī uz telefona.

+