Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [www] HTML + JS Zrobione zgodnie ze sztuką?
Forum PHP.pl > Inne > Oceny
land
Proszę o ocenę, czy kod napisany jest zgodnie ze sztuką.
Wygląd strony jest ascetyczny i jest to celowe bo ma ona być tylko demonstracją działania lokalizacji.

geolokalizacja
Tuminure
Do czego można się przyczepić:

Deklarujesz funkcje w globalnej przestrzeni.
Polskie komentarze i nazwy zmiennych.
Niekonsekwentnie stosujesz ' i ".
Comandeer
Jak robisz komunikat o braku JS, to wypadałoby, żeby reszta strony, która działa tylko z JS była ładnie ukryta a nie straszyła swoim niedziałaniem wink.gif IMO lepiej się do tego od noscript nada http://www.paulirish.com/2009/avoiding-the-fouc-v3/
Sama struktura kodu HTML bardziej przypomina dl i warto by to zastosować tutaj
Kod
window.onload = init;

A co jak będę chciał co innego odpalić przy load? Widać tu dwa błędy: wspomniane już zmienne globalne (co druga biblioteka ma metodę init) i korzystanie z DOM0. De facto można w ciemno założyć, że wszystkie przeglądarki obsługują addEventListener i go tu użyć. Z racji tego, że nie działa tylko w IE8-, tak samo jak geolokalizacja, to w Twoim wypadku nie ma się co przejmować BC.
Kod
case blad.PERMISSION_DENIED:

To też już było wspomniane, ale zobacz sam - to wręcz śmiesznie wygląda
Czemu metoda od wyświetlania błędu usuwa przy okazji mapkę? Usunięcie mapki raczej nie jest częścią operacji "wyświetlanie błędu"

Co do zmiennych globalnych: warto zajrzeć tu: http://benalman.com/news/2010/11/immediate...ion-expression/ i tu: http://addyosmani.com/writing-modular-js/
land
Dziękuje za uwagi. Wprowadziłem zmiany. Proszę o ponowną ocenę.

Wszystkie uwagi poza kwestią języka wydawały mi się zasadne. Jednak co do języka mam wątpliwości. Jaki jest argument za używaniem angielskich nazw zmiennych i komentarzy w lokalnych projektach?

W projektach które mają być udostępnione światu lub prowadzone w międzynarodowym zespole to sprawa jest oczywista, angielski poszerza grono osób które mogą pracować nad kodem. Oczywiście angielski jest podstawowym językiem w IT ale z jakiegoś powodu tłumaczenie dokumentacji technicznej z angielskiego na inne języki nie jest niczym szczególnie dziwnym. Czyli jest jakieś uzasadnienie dla używania języków narodowych.
Comandeer
Choćby spójność kodu uzyskasz - API przeglądarki jest po angielsku. Co do dokumentacji technicznej - to jednak IMO inna inszość

Co do poprawionego kodu: wygląda o wiele ładniej. Mam jednak 2 zastrzeżenia wink.gif
Kod
if (window.addEventListener) {
    window.addEventListener("DOMContentLoaded", geolokalizacja.init, false);
}
else {
    document.getElementById("komunikat").innerHTML = "Zmień lub zaktualizuj swoją przeglądarkę do nowszej wersji";
}

Jeśli skrypt masz w head, to kod w else się nie wykona z prostego powodu: element #komunikat jeszcze nie istnieje. Trza by poczekać na wczytanie się drzewka DOM (window.onload od biedy się tu nada)

Drugie zastrzeżenie to już raczej kwestia preferencji. Publiczne API raczej bym zdefiniował w taki sposób:
Kod
var pub = {
    init: init,
    innaFunkcja: innaFunkcja
};

Ale jak sam widzisz, to już raczej taka zmiana czysto kosmetyczna
land
Postanowiłem wyodrębnić z skryptu JS komunikaty, aby łatwo można było dokonać ich tłumaczenia.

W pliku /index_en.html jest użyta angielska wersja.

Proszę o zerknięcie, czy pomysł i realizacja są poprawne.
Comandeer
Raczej bym to podczepił pod window.geolocalization.messages - nie sądzę, żeby dwie przestrzenie nazw były konieczne.
land
Jak bym wiedział jak to bym podczepił.
Nie mogę tego zrobić przed załadowaniem geolocation.js bo window.geolocation nie jest zdefiniowane więc nie dodam .messages, a po też nie mogę bo wcześniej odwołuję się do jeszcze nie zdefiniowanych tłumaczeń.
Comandeer
Istnieje pewna stara sztuczka wywodząca się z Google Analytics, a która jest często wykorzystywana do konfiguracji różnych skryptów wink.gif
Kod
window.geolocation = {
    upgrade: "Change or upgrade your browser to the latest version."
    ,itd: "no wiesz"
};

//i później w naszym głównym skrypcie
window.geolocation = (function()
{
    var messages = window.geolocation || {}
    ,init = function() {}
    ,otherMethod = function() {}; //na potrzeby kodu demonstracyjnego

    var pub = {
        messages: messages
        ,init: init
        ,otherMethod: otherMethod
    };

    return pub;
}());
land
Zrobiłem wedle wskazówek.

Dlaczego preferujesz zapis:
Kod
init = function() {}
zamiast standardowego:
Kod
function init() {}
Comandeer
Hmm… Ale ten drugi IMO jest rzadziej spotykany.

Obydwa zapisy wbrew pozorom sporo się różnią. Pierwsze to wyrażenie, interpretowane jako zmienna, drugie to deklaracja funkcji. Deklaracje są hoistowane, natomiast wyrażenia zachowują się jak zmienne. Dodatkowo wyrażenia pozwalają mi tworzyć konstrukcje typu
Kod
init = function innerName() {}

co przydaje się zwłaszcza przy rekurencji.

Najładniej o tym pisał kangax, więc po prostu Cię tam odeślę. UWAGA! Mocno JS-owy i techniczny artek, ale wyjaśnia chyba wszystko, co jest związane z różnicami pomiędzy tymi dwoma wink.gif https://kangax.github.io/nfe/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.