1. JavaScript / Говнокод #17996

    +147

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    $(function() {
    	// Калькулятор
    	function calculate(el,btn){
    
    		// Запоминаем данные
    		//-----------------------------------------------------------------------------------------------------------------									
    		var priceAtribut = 'data-val';			// Атрибут с ценами у блоков
    		var cartTotal = $('.total_price p');	// Елемент
    		
    		var elem = {
    			parentModule 	   : $(el).parents('cart'),						// Родительский блок корзины
    			btn         	   : $(btn),									// Текущая кнопка которая была нажата
    			inpt        	   : $(el).find('.input-counts'),				// Инпут с колличеством
    			priceBase    	   : $(el).find('.string-elem-price-base'),		// Базовая цена товара
    			priceTotal         : $(el).find('.string-elem-price-total')		// Общая сумма товара
    		};
    
    		//функция: проверка колличества товаров, если к-во = 0, прекращаем работу скрипта
    		//-----------------------------------------------------------------------------------------------------------------
    		(function checkCounts () {
    			var thisCounts = (elem.inpt.val() - 0) + (elem.btn.attr(priceAtribut) - 0);
    			if(thisCounts != 0) {goCheck(thisCounts)}
    		}());
    
    		//функция: Калькуляции и пересчета!
    		//-----------------------------------------------------------------------------------------------------------------
    		function goCheck (counts) {
    
    			// Запись колличества в инпут текущего товара
    			elem.inpt.val(counts);				
    			// Запись общей суммы текущего товара, исходя из количества 												
    			elem.priceTotal.html( counts * (elem.priceBase.attr(priceAtribut) - 0) );	
    			// Запись общей суммы текущего товара, исходя из количества в атрибут datavalue	
    			elem.priceTotal.attr( priceAtribut, counts * (elem.priceBase.attr(priceAtribut) - 0) ); 
    
    			checkTotalSumm();		
    		}
    
    		// Функция которая делает общий пересчет общей суммы каждого товара, и записывает результат.
    		//-----------------------------------------------------------------------------------------------------------------
    		function checkTotalSumm () {
    			var totalSumm = 0;	
    			$('.'+elem.priceTotal.attr('class')).each(function(){
    				totalSumm += $(this).attr(priceAtribut) - 0;
    				
    			});
    			cartTotal.html(totalSumm);
    		}
    	}
    
    	// Запуск функции калькулятора
    	$('.number button').click(function() {
    		calculate($(this).parents('.item'),this);
    	});
    });

    Я только начинаю углубляться в JS, хотелось бы узнать мнение профи, насколько это говнокод!

    Запостил: 0whitewolf0, 15 Апреля 2015

    Комментарии (23) RSS

    • Я не профи, я просто очень сильно люблю JS (чистый JS без jQuery).
      0. Такие красивые столбики... Но следите, пожалуйста, за табами и пробелами до конца. Если не считать комментариев, в строках 11-15 между именами свойств и двоеточием не уследили.
      1. Возможно, вместо конструкции (X-0) следует использовать +X, если хочется сэкономить символы или Number(X), если хочется наглядности. (Если писать Number(X), то можно смело посылать подальше всех бугуртящих: Вы сделали всё, что могли, что можно ещё требовать?)
      Ответить
      • при копировании сюда, индентация съехала у некоторых комментов.
        Jquery это костыль с которого я начинал... пытаюсь теперь освоить чистый, и пока все идет с трудом.
        Ответить
      • >>(X-0)

        я пишу Х*1
        Ответить
        • Поэтому ты в жизни ничего не добился!
          Ответить
          • Может, ещё пиписьками померяешься с ним?..
            Ответить
            • Зачем? У того гостя пиписька X*2 что-ли?
              Ответить
            • Я же Наташа, как ты измерять собрался?
              Ответить
              • По абсолютной величине. Ещё можно возвести в квадрат и сравнить.
                Ответить
                • я девственница и ничего пихать в себя не позволю. Не для вас моя ягодка росла
                  Ответить
                  • Я твою ягодку лично скушаю.
                    Ответить
                  • Ты сука, долбоёб и девственник.
                    Ответить
                    • И что? Он всё равно ничего пихать в себя не позволит. А значит разницы нет.
                      Ответить
                      • >>Он всё равно ничего пихать в себя не позволит.
                        Да нах он мне сдался!.. Он вообще не в моём вкусе.
                        Ответить
    • Зачем нужно это?
      //-----------------------------------------------------------------------------------------------------------------
      Ответить
      • я делал это для товарища, который только недавно начал осваивать js, делал для наглядности.
        Ответить
      • Сейчас проверим, можно ли без него:
        /̲/̲ф̲у̲н̲к̲ц̲и̲я̲:̲ ̲п̲р̲о̲в̲е̲р̲к̲а̲ ̲к̲о̲л̲л̲и̲ч̲е̲с̲т̲в̲а̲ ̲т̲о̲в̲а̲р̲о̲в̲,̲ ̲е̲с̲л̲и̲ ̲к̲-̲в̲о̲ ̲=̲ ̲0̲,̲ ̲п̲р̲е̲к̲р̲а̲щ̲а̲е̲м̲ ̲р̲а̲б̲о̲т̲у̲ ̲с̲к̲р̲и̲п̲т̲а̲


        P.S. Нет, нельзя. COMBINING LOW LINE не работает в моноширинных шрифтах.
        Ответить
    • показать все, что скрытоcleaned
      Ответить
    • > колличества

      Розенталя автору, внутривенно!
      Ответить
    • cleaned
      Ответить
    • cleaned
      Ответить
    • cleaned
      Ответить
    • if(thisCounts != 0) {goCheck(thisCounts)}

      лучше писать в развернутом виде, иначе при чтении кто-нибудь пропустит этот if

      (function checkCounts () {
          var thisCounts = (elem.inpt.val() - 0) + (elem.btn.attr(priceAtribut) - 0);
          if(thisCounts != 0) {goCheck(thisCounts)}
      }());

      Комментарии в коде нужны не для красоты, а для объяснения таких конструкций. Почему проверка сделана через immediate invocation pattern?

      Комментарии писать принято в стандарте jsDoc

      Пробелы вокруг параметров в функциях очень странно расставлены, где-то есть, где-то нет.

      Проверок на корректность данных нет в помине, если пользователь ввел букву, все полетит к чертям.
      Ответить
    • "Количество" пишется с 1 буквой "л", грамотей!
      Ответить

    Добавить комментарий