Jak to jest z tym kodem?

Jak to jest z tym kodem?
HO
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 6 lat
  • Postów:12
0

Hej, stworzyłem dwa projekty jeden z dłuższym kodem, a drugi z krótszym. Wynik kompilacji jest ten sam. Moje pytania brzmią czy:

  1. Zoptymalizowałem kod czy może go "zjanuszowałem"?
  2. Jeśli zoptymalizowałem to po co była dodatkowa metoda i typ return.

Kody:
Dłuższy:

Kopiuj
public class Funkcje 
{	
	public static void main(String[] args) 
	{
		System.out.println("Obwód koła wynosi " + obliczObwodKola(10.0) );
	}
	public static double obliczObwodKola(double r)
	{
		double obwodKola = 2(razy)*Math.PI(razy)*r; 
		return obwodKola;				
	}	
}

Krótszy:

Kopiuj
public class Test 
{
	public static void main(String[] args) 
	{
		double obwodKola = 2*(razy)Math.PI*(razy)10.0;
		System.out.println("Obwód koła wynosi " +obwodKola);
	}

}
edytowany 4x, ostatnio: flowCRANE
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Zjanuszowiłeś. Bo co jeśli chcesz policzyć obwód w kilku miejscach? Będziesz kopiować ten kod X razy? ;] Jedyna optymalizacja jaka się tam wydawała sensowna to:

Kopiuj
    public static double getCircumference(double r)
    {
        return 2*Math.PI*r; 
    }   

Albo w ogóle osobna klasa Circle jeśli masz takich funkcji więcej i operacji na kółkach.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
HO
Dzięki. Czyli w przypadku policzenia obwodu w kilku miejscach muszę stworzyć więcej metod? Nie optymalizując tego za pomocą wyżej napisanego kodu.
Shalom
Nie! Masz użyć tej jednej! O to właśnie chodzi. Co więcej jak wspomniał @datdata poniżej, teraz od razu widać w kodzie co tam liczysz.
HO
Mógłbyś napisać jakiś przykład z obliczeniem obwodu np w 3 miejscach? Bo nie bardzo rozumiem jak to później wpisać w system.out.println. Ale też nasunęło mi się pytanie co z tym?> double obwodKola = 2(razy)*Math.PI(razy)*r; skoro return to zastępuje? Wiem, że to pewnie dla Ciebie banalne, ale dla mnie magia..
Shalom
Tworzenie zmiennej tylko po to zeby zaraz zrobić return jest bez sensu. Jeśli chodzi o użycie funkcji w wielu miejscach to akurat twój przykład jest głupi. Ale pomyśl o funkcji logowania błędów/informacji -> zwykle jest potrzebna wszędzie w aplikacji. Podobnie np. otwieranie/czytanie/pisanie do plików. Albo jakieś StringUtils https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html to są rzeczy których używa się często w różnych miejscach w aplikacji.
datdata
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 7 lat
  • Postów:957
0

To nie jest "projekt", tylko snippet.

Ale nie chodzi tylko o kopiowanie później tego kodu wielokrotnie, ale też czytelność. W przypadku, gdy jest to prosty wzór, który zna każdy gimnazjalista, nie jest to aż tak ważne. Ale co, gdy dostaniesz wzór na objętość czworościanu ściętego? Wtedy nie masz pojęcia "co" kod robi, wyłącznie "jak" - mnoży przez siebie trzy liczby.

Nadawaj rzeczom nazwy tak, byś wiedział o czym jest program, bez komentarzy czy dziwnych printfów.


"A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects." Robert Heinlein.
edytowany 1x, ostatnio: datdata
HO
Ok dzięki, zapamiętam na przyszłość! :)
samouczek
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:67
0

Zależy co masz na myśli pisząć "zoptymalizowałem". Jeśli chodzi Ci o uzyskanie mniejszej złożoności/skrócenie czasu działania programu. To może i jest to jakaś "optymalizacja". Jedno wywołanie metody mniej, stack krótszy o jedną metodę. Czy to w tym przypadku ma znaczenie? Oczywiście, że nie ma.

To co zrobiłeś to jedna z metod refaktoryzacji - "inline". Jeśli pisząc "zjanuszowałem" miałeś na myśli zepsułem. To moja odpowiedź brzmi, to zależy ;). W niektórych przypadkach jednolinijkowe metody mają większy sens niż w innych. W innych "inline" obliczeń/zmiennej bardziej się nadaje.

HO
Rozumiem. Dzięki :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.