Efektywniejszy i bardziej czytelny kod

0

Witajcie!
Od kilku dni programuje w javie. Obecnie piszę program, który w przyszłości będzie używać protokołu SMPT do emaili, ale ja nie o tym. Jako, że mój kod nie wygląda zbyt czytelnie, to zaczęło mnie zastanawiać, czy da radę jakoś stworzyć sobie tablice np. JLabel i potem z wykorzystaniem pętli nie dodać jej po prostu do programu. Natomiast poniżej zamieszczam mój mało czytelny kod:

 

final JLabel username = new JLabel("usermane");
		final JLabel password = new JLabel("Password");
		final JLabel subject = new JLabel("From");
		final JLabel message = new JLabel("Message");
		final JLabel Excel = new JLabel("Excel Data");

JTextField fUsername = new JTextField();
		JTextField fPassword = new JTextField();
		JTextField fSubject = new JTextField();
		JTextField fMessage = new JTextField();
		JTextField fExcel = new JTextField();
		
		setLayout(new FlowLayout());
		add(username); 
		add(fUsername);
		add(password);
		add(fPassword);
		add(subject);
		add(fSubject);
		add(message);
		add(fMessage);
		add(Excel);
		add(fExcel);
1

Możesz to wrzucić w tablicę i dodać w pętli:

 
		for (Component componentToAdd : new Component[] { username, fUsername, ... }) {
			add(componentToAdd);
		}

Jeżeli chodzi o czytelność kodu, to ja nie mam pojęcia czym różni się username od fUsername. Musisz poprawić nazwy tak, żeby na pierwszy rzut oka obcy programista wiedział o co chodzi. To że ty wiesz co oznacza ten magiczny przedrostek nie znaczy że inni wiedzą, a nawet nie oznacza że Ty będziesz pamiętał za rok jak do tego wrócisz ;)

0

Okej, dzięki za trafne uwagi. Teraz wyszło mi z tego coś takiego:

 
for (JLabel componentToAdd : new JLabel[] { username, subject, message, Excel }) {
			add(componentToAdd);
	    }
for (JTextField componentToAdd : new JTextField[] {fieldUsername,fieldSubject,fieldMessage,fieldExcel}){
			add(componentToAdd);
            } 

Usunąłem stąd zmienną password, bo się w między czasie okazało, że java posiada bibliotekę, która od razu będzie zamieniać wpisany tekst na kropki. Ale jeszcze jedno pytanie rodzi się w mojej głowię, ponieważ mam nadal dość dużo zmiennych

final JLabel username = new JLabel("usermane");
		final JLabel password = new JLabel("Password");
		final JLabel subject = new JLabel("From");
		final JLabel message = new JLabel("Message");
		final JLabel Excel = new JLabel("Excel Data"); 
		
		JTextField fieldUsername = new JTextField();
		JTextField fieldSubject = new JTextField();
		JTextField fieldMessage = new JTextField();
		JTextField fieldExcel = new JTextField();
 

Da radę je jakoś wrzucić w tablicę, tak jak się to robi ze standardowymi zmiennymi?

1
Salin napisał(a):

Da radę je jakoś wrzucić w tablicę, tak jak się to robi ze standardowymi zmiennymi?

To są standardowe zmienne i możesz z nimi robić to co z każdą inną, w tym wrzucić w tablicę. Ale to tak naprawdę nie rozwiąże problemu, bo nadal będziesz miał tyle samo zmiennych, tylko zamiast przechowywać je w klasie, przechowujesz w tablicy. Dodatkowym problem będzie operowanie na konkretnych polach, bo żeby wyciągnąć nazwę użytkownika jeżeli ''fUsername", będzie w tablicy, będziesz musiał się sporo natrudzić.

Rozwiązaniem może być grupowanie w obiekty. Dla tego przypadku możesz stworzyć obiekt LabeledTextField, który będzie posiadał 2 pola. Obsługa takiego małego obiektu to nie jest problem, a dodatkowo nie będziesz musiał tworzyć tych elementów osobno co poskutkuje zmniejszeniem liczby elementów klasy którą przedstawiłeś z 8 do 4. Każdy z tych 4 elementów ma już swoje konkretne znaczenie więc nie ma co kombinować.

0

Okej. W takim razie nie będę już zbędnie kombinować. Dziękuje serdecznie za pomoc, temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1