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

    −1

    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
    if (!a) {
      	a = 1;
    } else {
    	a = 2;
    }
    var a = undefined;
    console.log(a); //undefined
    
    if (!a) {
      	a = 1;
    } else {
    	a = 2;
    }
    var a ;
    console.log(a); //1

    Запостил: Her, 02 Августа 2019

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

    • Не купить ли мне USB-UART мост? Flow control говорят нет, но зато уровни PHY выставляются джампером.
      Ответить
    • Да var, наверное, если переменная в текущем функции объявлена просто нихуя не делает.

      Именно поэтому я за let.
      Ответить
      • function f1(){
        if (!a) {
          	a = 1;
        } else {
        	a = 2;
        }
        var a = undefined;
        console.log(a); //undefined
        
        }
        
        function f2(){
        if (!a) {
          	a = 1;
        } else {
        	a = 2;
        }
        var a ;
        console.log(a); //1
        }
        
        f1();
        f2();


        это должно было быть 2 разных примера...

        Hoisting is a JavaScript mechanism where variables and function declarations are moved to the top of their scope before code execution.
        Ответить
    • переведи на пхп нах
      Ответить
    • Перевёл на "C":

      main(a) {
      	if (!a) {
      	  	a = 1;
      	} else {
      		a = 2;
      	}{
      	int a = 0;
      	printf("%d\n", a); //undefined
      
      	if (!a) {
      	  	a = 1;
      	} else {
      		a = 2;
      	}{
      	int a;
      	printf("%d\n", a); //1
      }}}


      https://ideone.com/nYXQki
      Ответить
      • Это же нихуя не стандартный с? Насколько приветствуется использование расширений gcc у сишников?
        Ответить
        • Не ябу, если честно. Если в ideone работает, значит стандартный. Вообще, я за "PHP".
          Ответить
        • Где тут гнутые расширения?
          Ответить
          • if (!a) {
                a = 1;
            } else {
                a = 2;
            }{
                int a;
                printf("%d\n", a); //1
            }

            Что это за синтаксис такой - объявлять блок кода в фигурных скобках после блока if-else?
            Ответить
            • Просто безусловный блок в скобках.
              Ответить
              • О, а почему в макрах для использования блоков использовался do{}while(0)? Например, в какой-то реализации qsort из stdlib
                https://code.woboq.org/userspace/glibc/stdlib/qsort.c.html
                Ответить
                • do { ... } while (0) вместо { ... } юзают чтобы раскрывшийся макрос требовал точку с запятой и был похож на обычный вызов функции. Иначе очень легко отстрелить ногу.
                  Ответить
                • Ideally you’ll get rid of the macro. Macros are evil in 4 different ways:

                  https://isocpp.org/wiki/faq/inline-functions#inline-vs-macros

                  https://isocpp.org/wiki/faq/misc-technical-issues#macros-with-if

                  https://isocpp.org/wiki/faq/misc-technical-issues#macros-with-multi-stmts

                  https://isocpp.org/wiki/faq/misc-technical-issues#macros-with-token-pasting

                  *****

                  Here’s a naive solution:
                  #define MYMACRO(a,b) \                
                          if (xyzzy) asdf()

                  This will cause big problems if someone uses that macro in an if statement:
                  if (whatever)
                          MYMACRO(foo,bar);
                      else
                          baz;

                  The problem is that the else baz nests with the wrong if: the compiler sees this:
                  if (whatever)
                          if (xyzzy) asdf();
                          else baz;

                  Obviously that’s a bug.
                  Ответить
            • Чтобы ограничить область видимости int a;
              Ответить
            • в отличие от жопаскрип с его варом, в сишечке декларация работает как let и ограничена блоком
              Ответить
              • В старом жопоскрипте писа́ли так:
                (function(){
                    var a ;
                    console.log(a);
                })();

                Красивый смайлик в последней строчке?
                Ответить
    • Перевёл на «Паскаль»:
      var a: integer;
      
      procedure sub1;
          var a: integer = 0;
          procedure sub2;
              var a: integer;
              begin
                  Writeln(a); //1    
              end;
      
          begin
            Writeln(a); //undefined
            if a=0 then
                a := 1
            else
                a := 2;
            sub2;
          end;
      
      
      begin
          if a=0 then
              a := 1
          else
              a := 2;
          sub1;
      end.


      http://ideone.com/EDMStp
      Ответить
    • Раз уж пошла такая пьянка:
      : // refill drop ; immediate
      
      0 value a
      
      :noname
        a 0=
        if
          1 { a }
        else
          2 { a }
        then
        0 { a }
        a . cr // undefined
      ; execute
      
      :noname
        a 0=
        if
          1. { a }
        else
          2 { a }
        then
        { a }
        a . cr // 1
      ; execute
      http://ideone.com/8aXJwu
      Ответить
    • В «Python» нет никаких «var». Именно поэтому я за «Python».
      Ответить
      • зато есть
        petuh = None
        Ответить
      • В «Python» есть «vars»:
        vars([object])
        
            Return the __dict__ attribute for a module, class, instance, or any other object with a __dict__ attribute.
        
            Objects such as modules and instances have an updateable __dict__ attribute; however, other objects may have write restrictions on their __dict__ attributes (for example, classes use a types.MappingProxyType to prevent direct dictionary updates).
        
            Without an argument, vars() acts like locals(). Note, the locals dictionary is only useful for reads since updates to the locals dictionary are ignored.
        Ответить
    • Сема, уходи! https://bit.ly/2MEncni
      Ответить

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