# Programmas / Software >  Jautājums par "eclipses" (un ne tikai) teksta redaktoru

## M_J

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.

----------


## JDat

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.

----------


## karloslv

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

----------


## M_J

Liels Paldies! Ctrl+Shift+F darbojas!

----------


## M_J

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.

----------


## karloslv

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.

----------


## M_J

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.

----------


## karloslv

Ā, 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  ::

----------


## M_J

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.

----------

