Przejrzyste pisanie kodu

0

Witam

Chciałbym się dowiedzieć czy kod prawidłowo powinien wyglądać tak

var Sprzedaz = "Toyota";

function TypyAut(nazwa) {
   if(nazwa == "Polonez")
      return nazwa;
   else
      return "Przykro nam, ale nie sprzedajemy marki " + nazwa + ".";
}

czy może tak


var Sprzedaz = "Toyota";

function TypyAut(nazwa) { {
   if(nazwa == "Polonez") }
      return nazwa; {
   } else
      return "Przykro nam, ale nie sprzedajemy marki " + nazwa + ".";
}

Bo w pętlach for nawias "{" pojawia się dość często

    for (var x=1; x<=10; x++) {
        var tekst = x*y; //tworzymy tekst do wstawienia do komórki

        if (y==1 || x==1) {  //jeżeli jest to pierwsza komórka w pionie lub poziomie
            var td = '<th>'+tekst+'</th>'; //stwórz nowe th
        } else {
            var td = '<td>'+tekst+'</td>'; //stwórz nowe td
       }
0

Wybierz któryś styl i się go spójnie w całym projekcie trzymaj

Wg mnie K&R best w tym przypadku

var sprzedaz = "Toyota";

function TypyAut(nazwa) {
	if (nazwa == "Polonez") {
		return nazwa;
	} else {
		return "Przykro nam, ale nie sprzedajemy marki " + nazwa + ".";
	}
}
2

@ekhart - Wg mnie zachęcasz do złej praktyki. Dlaczego? Bo tylko zwiększa się szansę na to że ktoś zechcę coś dopisać po ifie i dostanie błąd. Dopisanie tych klamerek nawet przy pojedynczej instrukcji (np w ifie) daje o tyle fajną możliwość - że w przypadku np javascriptu, można tam na szybko sobie machnąć console.log'a albo de facto inne instrukcje (!debug-mode).

Brak klamerek dla mnie nic nie daje, trudniej coś dopisać - bo i trzeba klamerki znowu dodawać, zmniejsza ryzyko błędów oraz nie stanowi jakiegoś strasznie nadmiarowego zwiększenia objętości pliku z takimi skryptami.
EDIT:
ooo widzę że jednak polecasz klamerki - prawidłowo. Dodatkowo istnieje jeszcze wojna pomiędzy

if(warunek){
    costam();
}

a

if(warunek)
{
    costam();
}
Ale to już temat na inna bajkę ;)
0
axelbest napisał(a):

@ekhart - Wg mnie zachęcasz do złej praktyki. Dlaczego? Bo tylko zwiększa się szansę na to że ktoś zechcę coś dopisać po ifie i dostanie błąd. Dopisanie tych klamerek nawet przy pojedynczej instrukcji (np w ifie) daje o tyle fajną możliwość - że w przypadku np javascriptu, można tam na szybko sobie machnąć console.log'a albo de facto inne instrukcje (!debug-mode).

Brak klamerek dla mnie nic nie daje, trudniej coś dopisać - bo i trzeba klamerki znowu dodawać, zmniejsza ryzyko błędów oraz nie stanowi jakiegoś strasznie nadmiarowego zwiększenia objętości pliku z takimi skryptami.
EDIT:
ooo widzę że jednak polecasz klamerki - prawidłowo. Dodatkowo istnieje jeszcze wojna pomiędzy

if(warunek){
    costam();
}

a

if(warunek)
{
    costam();
}
Ale to już temat na inna bajkę ;)

Dzięki za odpowiedź. Ale te dodatkowe klamerki dla javascriptu coś oznaczają czy to jest dla samego programisty?

1

@LynxBings: oznaczają - tak jak chyba we wszystkich językach które zawierają klamerki (python ich nie ma). Oznaczają blok kodu. Wiadomo że przy pojedynczej instrukcji nie są potrzebne, ale koszt dodania jest niski, a mamy same zyski.

3

A może:

function TypyAut(nazwa) { // zmień nazwę funkcji, bo nic nie mówi
    if (nazwa !== 'Polonez') {
        return "Przykro nam, ale nie sprzedajemy marki " + nazwa + ".";
    }

    return nazwa;
}

wtedy masz -1 zagnieżdżenie dla właściwego przebiegu sterowania, a nie musisz przewijać na sam koniec funkcji, żeby zobaczyć co się stanie jak to jednak nie polonez.

0
axelbest napisał(a):

@LynxBings: oznaczają - tak jak chyba we wszystkich językach które zawierają klamerki (python ich nie ma). Oznaczają blok kodu. Wiadomo że przy pojedynczej instrukcji nie są potrzebne, ale koszt dodania jest niski, a mamy same zyski.

Czyli w praktyce

else {
        return "Przykro nam, ale nie sprzedajemy marki " + nazwa + ".";
    }

Klamerki ograniczają kod żeby był wykonany w ramach przykładowego else?

1

@LynxBings: tak. Jak masz po if/else pojedyńcze wyrażenie to teoretycznie nie trzeba ich pisać, ale dobrą praktyką jest jednak ich dodawanie.

0

Ogólnie to polecam się nie zastanawiać i zainstalować linter (ESLint) z jednym z tych style guidów:

1
<!DOCTYPE html>
<html>
    <head>
        <script>
            function isCarForSale(name) {
                var carsNotForSale = ['polonez'];

                return carsNotForSale.indexOf(name.trim().toLowerCase()) < 0;
            }

            function showTestMessage() {
                var msg = isCarForSale('Polonez2') ? 'Ok, można sprzedawać' : 'Nie można sprzedawać';

                alert(msg);
            }
        </script>
    </head>
    <body>
        <button onclick="showTestMessage()">Test</button>
    </body>
</html>

To tak jako przykład do komentarza @Maciej Cąderek Oczywiście można to rozwinąć o wiele bardziej (walidacje typów itp itd)

0
axelbest napisał(a):
<!DOCTYPE html>
<html>
    <head>
        <script>
            function isCarForSale(name) {
                var carsNotForSale = ['polonez'];

                return carsNotForSale.indexOf(name.trim().toLowerCase()) < 0;
            }

            function showTestMessage() {
                var msg = isCarForSale('Polonez2') ? 'Ok, można sprzedawać' : 'Nie można sprzedawać';

                alert(msg);
            }
        </script>
    </head>
    <body>
        <button onclick="showTestMessage()">Test</button>
    </body>
</html>

To tak jako przykład do komentarza @Maciej Cąderek Oczywiście można to rozwinąć o wiele bardziej (walidacje typów itp itd)

Tutaj dodałem komentarze z tego jak ja widzę ten kod i z jednym pytaniem czy możecie mi sprawdzić czy dobrze to rozumiem?

        <script>
            function isCarForSale(name) { // wywołujemy funkcję
                var carsNotForSale = ['polonez']; // Tu tworzymy stringa o nazwie polonez
 
                return carsNotForSale.indexOf(name.trim().toLowerCase()) < 0; // Jeżeli jest mniejsze od zera to ma zwrócić ale co to za funkcja? I jak dowiedzieć się co ona oznacza?
            }
 
            function showTestMessage() { // Tutaj załączona funkcja która odpowiada za wyświetlanie wiadomości
                var msg = isCarForSale('Polonez2') ? 'Ok, można sprzedawać' : 'Nie można sprzedawać'; // Tutaj deklarujemy zmienną ze stringiem polonez2 i dwoma tekstami wiadomości w zależności od spełnionych warunków
 
                alert(msg); // pokazuje wiadomość
            }
        </script>
3

Incepcja - komentarze do komentarzy :D
Po kolei

  1. // wywołujemy funkcję <- Nic nie wywołujemy, tylko definiujemy tę funkcję

  2. // Tu tworzymy stringa o nazwie polonez Nie tworzymy stringa, tylko tworzymy tablicę stringów.

  3. // Jeżeli jest mniejsze od zera to ma zwrócić ale co to za funkcja? I jak dowiedzieć się co ona oznacza?
    -- Wystarczy nauczyć się czytać kod i wiedzieć co zwracają wyniki operacji logicznych -> Jeśli w tablicy carsNotForSale pozycja(index) wartości parametru name funkcji, jest mniejsza niz 0 zwróć prawdę. Przed sprawdzeniem z parametru name ucinamy skrajne spacje oraz zmieniamy znaki na lowercase Z czym poza tym masz problem? Jak nie rozumiesz co oznacza np indexof, wykonujesz następujące działania google -> javascript indexof (jak dalej nie zczaisz to dopisz "how to use" albo coś podobnego). Tak czy siak nastepnym razem postaraj się troszkę i poszukaj na google, nie będę/będziemy (może inni forumowicze podzielą moje zdanie) - Ci pomagać z takimi podstawami.

  4. // Tutaj załączona funkcja która odpowiada za wyświetlanie wiadomości - OK

  5. // Tutaj deklarujemy zmienną ze stringiem polonez2 i dwoma tekstami wiadomości w zależności od spełnionych warunków - Tutaj nie deklarujemy zmiennej ze stringiem polonez2, tylko wywołujemy funkcję z parametrem polonez2.

  6. // pokazuje wiadomość - OK, ale tego to już chyba nie musiałeś komentować...

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