• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Refakotoryzacja kodu odczytu z pliku

Object Storage Arubacloud
0 głosów
471 wizyt
pytanie zadane 24 marca 2016 w C i C++ przez niezalogowany

Witam, dziś napiszę trochę ogólnikowo.

Każdy większy (i większe) programy, chcąc porządnie się reprezentować, albo być użyteczny, potrzebuje zapisu i odczytu z pliku. A jako, że największą (z tego co wiem) frajdę programiście, daje refaktoryzacja kodu i szukanie błędów, chciałbym się was zapytać:

Czy nie lepiej byłoby zamiast switch'a zrobić pętlę for gdzie wczytujemy wartości bezpośrednio do tablicy.

zamiast

switch(nr_linii)
{
case
case
case
case
case
}

zrobić

for(int i=0;/*to oznacza nr linii*/i<il_zmiennych; i++)
{
    /*jakiś kod*/
}

program działałby sprawniej i od razu mielibyśmy wszystkie elementy

Takie rozwiązanie ma zalety oto one:

  1. dobrze się sprawdza gdy wczytujemy dane do obiektów (np magazyn zwierząt)
  2. może stworzyć całą tablicę
  3. szybsze od switch'a 

więcej nie mam pomysłów, przynajmniej na ten moment

Teraz wady:

  1. minimalnie trudniej znaleźć problem przez pętlę
  2. nie da się idealnie kontrolować 
  3. trzeba tworzyć dynamiczną tablicę w przypadku rożnej liczby elementów 

Co wy myślicie o tym? Jakie macie zdanie o tym?? Myśleliście kiedyś żeby poprawić kod z ponad 200 linijek do 50 gdzie dodanie nowych elementów zajmuje 10-15 linijek a po refaktoryzacji tylko jedną/dwie/kilka??

Odpowiem na te pytania:

Cały czas o tym myślę.
Myślę że to dobry pomysł ale nie wolno przesadzić i się zatracić nad tym.
Ja taką funkcję zrobiłem, lecz trzeba dodać 2 linijki, pracuję nad tym.

1 odpowiedź

0 głosów
odpowiedź 24 marca 2016 przez niezalogowany
edycja 24 marca 2016

Mnie zastanawia czemu zrobiłeś to na switch'ach? Nie jestem w stanie znaleźć za bardzo wyższości switcha nad pętlą, bo jeżeli znasz dokładnie zawartość pliku, rozmiar jest stały, a w każdej linii są inne dane (więc wczytanie ich do tablicy pętlą odpada) to lepiej wczytać je bez używania warunków, np:

/* FILE */
HEADER
dane_liczbowe
dane_tekstowe

/* Przykładowy plik */
BEST_SCORE
1000
my_username

/* wczytanie zawartości pliku */
file >> header >> points >> username;

Jeżeli tych danych jest wiele (a ich układ jest stały), to lepszym wyborem jest oczywiście pętla. Switch może być alternatywą dla if'a w przypadku gdy mamy dodatkowo pola różnych typów (chociaż i tak to zostanie zamienione na blok if'ów w większości przypadków), jednak twój przykład odnosi się do numerów linii, a w tym przypadku użycie switcha jest moim zdaniem bez sensu

komentarz 24 marca 2016 przez niezalogowany
jeśli jednak mamy tak jak napisałem jakąś bazę i ilość wartości jest różna bo wczytujemy z kilku plików to taki pomysł wydaje się dobry, poza tym stworzyłem ten temat też dlatego że Pan Mirosław pokazał wczytywanie na switchu a nie koniecznie to jest dobre rozwiązanie
komentarz 24 marca 2016 przez niezalogowany

Dalej jest strasznie bezsensowny, switch to specyficzny rodzaj "if'a", który tylko w niektórych sytuacjach można zoptymalizować.

Nawet przy różnej ilości linii całość można wczytać lepiej na pętlach (większa elastyczność kodu niż switch), pomysł nie jest dobry, pomysł dalej jest dość bezsensowny, by nie rzec głupi.

Jeżeli masz różną ilość danych w linii to dobrym pomysłem jest dodać na początku linii ilość danych do wczytania, dzięki temu nie hard-codujesz tego. Np

int line = 0;
while (!file.eof())
{
  int size;
  file >> size;
  
  // jeżeli lubisz for
  for(int i=0;i<size;++i)
  {
    file >> data[line][i];
  }
  ++line;
}

To jest oczywiście uproszony model, nie uwzględnia tego że drugi wymiar tablicy jest różny i to przydałoby się trzymać albo w jakiejś strukturze aktywnie informującej o rozmiarze albo trzymać gdzieś informacje o rozmiarach. Zaletą tego rozwiązania jest to, że jeżeli będziesz chciał dodać np 30 nowych linii do pliku, a każda będzie miała różną ilość danych to nie będziesz musiał zmieniać kodu, przy case'ach musisz to zrobić.

Podobne pytania

0 głosów
0 odpowiedzi 449 wizyt
0 głosów
1 odpowiedź 355 wizyt
pytanie zadane 12 lipca 2020 w JavaScript przez Arcywojak Początkujący (370 p.)
0 głosów
2 odpowiedzi 369 wizyt
pytanie zadane 24 grudnia 2019 w JavaScript przez Paweł Szewczyk Obywatel (1,410 p.)

92,579 zapytań

141,432 odpowiedzi

319,662 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...