powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Одному мне не хватает этого в js?
81 сообщений из 81, показаны все 4 страниц
Одному мне не хватает этого в js?
    #38519538
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Мне вдруг стало интересно, одному мне это в js мешает при решении более-менее сложных задач:
1. отсутствие полноценного механизма наследования
2. отсутствие проверки на валидность переданных в функцию параметров
3. отсутствие возможности перегрузки методов (при разных входных параметрах разная логика)

Ну то есть сочтёт ли кто-то полезным такой код?
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Object.prototype.ext = function(construct, args){
  construct.apply(this, args);
  this._prototypes.push(construct);
}

Object.prototype.instanceOf = function(className){
  if(this.constructor.name===className) return true;
  if(typeof(this._prototypes)==='undefined') return false;
  var res = false;
  for(var i=0; i<this._prototypes.length; i++){
    if(this._prototypes[i].name===className){
      res=true;
      break;
    }
  }
  return res;
}

function validateArguments(num, types, args){
  if(args.length<num){
    throw new Error('too few arguments in function '+args.callee.name);
  }
  if(args.length>num){
    throw new Error('too many arguments in function '+args.callee.name);
  }
  for(var i=0; i<args.length; i++){
    if(!args[i].instanceOf(types[i]))
      throw new Error('argument number '+(i+1)+' in function must be a '+types[i]+' but '+args[i].constructor.name+' is given');
  }
}

function TObject(){
  this._prototypes=[];
}



Сейчас вот на основании написанного кода думаю как можно реализовать перегрузку методов (понятное дело полноценную сделать не получится, но возможно выйдет свинтить что-то удобное, что сможет восполнить отсутствие данного функционала).

Сейчас готовы только первых 2 пункта. Используются приблизительно вот так:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
function MyTestObject(){
  this.ext(TObject, []);
  this.tryVal = function tryVal(a1, a2, a3){
    validateArguments(3, ['String', 'Number', 'TObject'], arguments);
  }
}
var t = new MyTestObject();
t.tryVal(10,'hi', t);



Получим соответственно эксепшены, в случае, если переданные параметры не соответствуют ожидаемым.

В общем, всё это не имеет особого смысла, и мне просто скучно было вчера и я начал фигнёй маяться? Или моя идея реально может быть полезной? (особенно ещё не реализованный третий пункт)
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38519571
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрМне вдруг стало интересно, одному мне это в js мешает при решении более-менее сложных задач:Это мешает тем, кто не может избавиться от шаблонов ООП. Ты не один такой :)

Более-менее сложные задачи нужно решать с помощью библиотек и фреймворков. Например, механизм прототипирования в ExtJS ничуть не хуже ооп-наследования.

ПрограмёрНу то есть сочтёт ли кто-то полезным такой код?И таких кодов много, но широкого распространения они не получили.

Програмёрособенно ещё не реализованный третий пунктПерегрузка это синтаксический прием, он имеет смысл лишь при поддержке на уровне синтаксиса самого языка. В js нельзя записать одновременно function xxx(a,b,c) и function xxx(x,y), в итоге будет видна только последняя функция. А это значит, что все равно придется вручную разруливать разную логику в рамках одной функции или разносить одноименные функции про разным областям видимости. И ради чего? Перегрузка призвана уменьшить количество писанины и сделать ее более прозрачной для понимания. А насильное внедрение ее видимости в js приведет к обратному.

Если же хочется поиметь полноценные 1 и 2 пункты, советую посмотреть сюда .
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520082
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все недостатки надуманны
1. в JS присутствует полноценный механизм наследования. Другое дело что он в корне отличается от механизма в Java,C#,C++
2. в JS нет строгой типизации т.е. если нет строгих типов данных то и проверять их не нужно можно накидать сверху костылей с проверкой типов но по моему не стоит (нужен конкретный пример на котором видно нужна ли проверка типов или же можно обойтись без нее)
3. опять же вопрос типов данных

Имхо: на лицо попытка превратить JS в другой язык
Имхо2: Нужно быть аккуратнее с Object.prototype.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520246
Фотография VladislavVV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Многие ответы на вопросы топикстартера есть в книге "JavaScript Шаблоны" Стоян Стефанов
Если надо - пишите, поделюсь

Стефанов С.
JavaScript. Шаблоны. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 272 с., ил.
ISBN 978-5-93286-208-7
Разработчики серверных, клиентских или настольных приложений на Java-
Script нередко сталкиваются с проблемами, связанными с объектами, функци-
ями, наследованием и другими особенностями этого языка. Какие же приемы
разработки приложений на JavaScript являются наиболее удачными? Данная
книга дает ответ на этот вопрос, предлагая большое количество различных
шаб лонов программирования на JavaScript, таких как «единственный объект»
(singleton), «фабрика» (factory), «декоратор» (deco rator) и другие. Можно ска-
зать, что они являются не только методами решения наиболее типичных задач
разработки ПО, но и заготовками решений для целых категорий таких задач.
Использование шаб лонов при программировании на языке Java Script имеет
свои особенности. Некоторые из них, разработанные с позиций языков со стро-
гим контролем типов, таких как C++ и Java, не могут непосредственно приме-
няться в языках с динамической типизацией, таких как Java Script. Для таких
шаб лонов в языке Java Script имеются более простые альтернативы.
Написанная экспертом по языку JavaScript Стояном Стефановым – ведущим
специалистом компании Yahoo! и создателем инструмента оптимизации про-
изводительности веб-страниц YSlow 2.0, – книга включает практические со-
веты по реализации каждого из рассматриваемых шаблонов с примерами про-
граммного кода. Автор также приводит антишаблоны – приемы программиро-
вания, которых следует по возможности избегат
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520445
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин СергейВсе недостатки надуманны
1. в JS присутствует полноценный механизм наследования. Другое дело что он в корне отличается от механизма в Java,C#,C++
2. в JS нет строгой типизации т.е. если нет строгих типов данных то и проверять их не нужно можно накидать сверху костылей с проверкой типов но по моему не стоит (нужен конкретный пример на котором видно нужна ли проверка типов или же можно обойтись без нее)
3. опять же вопрос типов данных

Имхо: на лицо попытка превратить JS в другой язык
Имхо2: Нужно быть аккуратнее с Object.prototype.

насчёт пункта 2 полностью верно. Как таковой он в принципе не сильно востребован... лишь иногда для защиты от глупой ошибки программиста (ну то есть, если пишущий не читает документацию по методам перед их вызовами). В основном это как предисловие к пункту 3 (ещё не знаю насколько он реализуем. Хочу, что бы было удобно и как уже написали, что бы это не приводило к написанию жутких невостребованных конструкций).

А вот насчёт первого пункта. Может я не прав, но... насколько просто в js на прототипах создать такой конструктор, который бы в себе вызывал конструктор родителя с определённым перечнем аргументов? Насколько я знаю без дополнительных манипуляций этого сделать нельзя (то есть нету определённой в языке конструкции, которая позволила бы это сделать).
Я не прав? Если прав, то тогда механизм наследования в js есть, и для большинства задач он достаточный, но всё же не полноценный.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520447
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

Вам не хватает другого языка!
Вы пытаетесь натянуть парадигмы одного языка на другой - это как если бы вы к молотку пытались привинтить возможности топора! )
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520459
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JavaScript не предназначен для монолитных приложений как другие языки - отсюда классовость как 5я нога у собаки!
Используйте модули и extensions - в этом сила javascript.
Рекомендую обратить внимание на кучу фреймворков, применяющих все прелести языка, для создания больших приложений - Backbone, Angular, Ember и другие.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520482
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp, под монолитными приложениями Вы что понимаете?
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520505
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spПрограмёр,

Вам не хватает другого языка!
Вы пытаетесь натянуть парадигмы одного языка на другой - это как если бы вы к молотку пытались привинтить возможности топора! )

Особых отличий в разных языках программирования нету )) Всё людьми ведь писано, и при том всё такими же программистами.

А вот насчёт парадигмы... Не отрицаю, не хватает мне классового наследования в js. А про неудобство использования наследования на прототипах в js (для меня по крайней мере) я написал в прошлом сообщении.

Можно использовать конечно фреймворки, разные модули и библиотеки... Но незачем это делать в случае, когда требуется лишь добавить мизерные изменения в обычный функционал. Это как например подключать jquery только потому, что в одной строчке вдруг потребовалось обратиться к элементу по селектору, или переносить сайт на yii или другой фреймворк только потому, что на сайте-визитке надо создать форму регистрации пользователей для механизма рассылок например.

Понимаете о чём я? Вот мне обычно требуются лишь мизерные (описанные мной) изменения в стандартном функционале и синтаксисе js. Для этого использовать целые модули типа TypeScript (кстати, спасибо за ссылку, раньше слышал только про coffeScript или как то так) и потом искать софт, поддерживающий автодополнение и подсветку нового синтаксиса не вижу смысла.

Потому то и решил несколько строчек написать "для души"... и подумал, а вдруг ещё кому пригодится... может кто ещё тот же дискомфорт в js ощущает, что и я. И может кто идейку подкинет какую. :)
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520510
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр, validateArguments я бы на декоратор заменил.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520519
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрМожет я не прав, но... насколько просто в js на прототипах создать такой конструктор, который бы в себе вызывал конструктор родителя с определённым перечнем аргументов? Насколько я знаю без дополнительных манипуляций этого сделать нельзя (то есть нету определённой в языке конструкции, которая позволила бы это сделать).
Я не прав? Прав, без доп. манипуляций нельзя. Вот как это решается в TS:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
/*классическое ооп-наследование с вызовом базового конструктора с параметром*/
class Animal {
    constructor(public name: string) { }
    move(meters: number) {
        alert(this.name + " moved " + meters + "m.");
    }
}

class Snake extends Animal {
    constructor(name: string) { super(name); }
    move() {
        alert("Slithering...");
        super.move(5);
    }
}

class Horse extends Animal {
    constructor(name: string) { super(name); }
    move() {
        alert("Galloping...");
        super.move(45);
    }
}

var sam = new Snake("Sammy the Python");
var tom: Animal = new Horse("Tommy the Palomino");

sam.move();
tom.move(34);

/*как это транслируется в js*/

var __extends = this.__extends || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    __.prototype = b.prototype;
    d.prototype = new __();
};
var Animal = (function () {
    function Animal(name) {
        this.name = name;
    }
    Animal.prototype.move = function (meters) {
        alert(this.name + " moved " + meters + "m.");
    };
    return Animal;
})();

var Snake = (function (_super) {
    __extends(Snake, _super);
    function Snake(name) {
        _super.call(this, name);
    }
    Snake.prototype.move = function () {
        alert("Slithering...");
        _super.prototype.move.call(this, 5);
    };
    return Snake;
})(Animal);

var Horse = (function (_super) {
    __extends(Horse, _super);
    function Horse(name) {
        _super.call(this, name);
    }
    Horse.prototype.move = function () {
        alert("Galloping...");
        _super.prototype.move.call(this, 45);
    };
    return Horse;
})(Animal);

var sam = new Snake("Sammy the Python");
var tom = new Horse("Tommy the Palomino");

sam.move();
tom.move(34);


ПрограмёрЕсли прав, то тогда механизм наследования в js есть, и для большинства задач он достаточный, но всё же не полноценный.Нет наследования в js, есть прототипирование. Точка. Это все равно что сказать, что в js есть jquery. Любой механизм js-наследования — не В , а НА js.

Малыхин Сергей 1. в JS присутствует полноценный механизм наследования. Другое дело что он в корне отличается от механизма в Java,C#,C++Такие бредовые высеры лишь запутывают понимание ситуации. В корне отличающийся механизм это прототип. У него есть собственное название, схерали называть его "наследованием"?
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520555
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПрограмёр, validateArguments я бы на декоратор заменил.

Правильно понял?
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Object.prototype.validateArguments = function(types, func){
  var obj = this;
  return function(){
    if(arguments.length<types.length){
      throw new Error('too few arguments in function '+func.name);
    }
    if(arguments.length>types.length){
      throw new Error('too many arguments in function '+func.name);
    }
    for(var i=0; i<arguments.length; i++){
      if(!arguments[i].instanceOf(types[i]))
        throw new Error('argument '+(i+1)+' in function '+func.name+' must be a '+types[i]+' but '+arguments[i].constructor.name+' is given');
    }
    func.apply(obj, arguments);
  }
}



тогда объявление метода такое:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
function MyTestObject(){
  this.ext(TObject, []);
  this.tryVal = this.validateArguments(
    ['String', 'Number', 'TObject'], function tryVal(a1, a2, a3){
    }
  );
}
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520607
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyТакие бредовые высеры лишь запутывают понимание ситуации. В корне отличающийся механизм это прототип. У него есть собственное название, схерали называть его "наследованием"?
Честное пионерское!!! на JavaScript можно создавать объекты на основании уже существующих просто добавляя в них свойства и методы.


автор... насколько просто в js на прототипах создать такой конструктор, ... Опять же мышление из другой философии(языка программирования) ...
Имхо в JS не стоит создавать новые объекты нужно расширять и изменять уже существующие
т.е. использование конструктора подразумевает создание объекта а не изменение уже существующего
т.е. попытка использовать классовый подход в прототипированном языке
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520644
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин СергейAntonariyТакие бредовые высеры лишь запутывают понимание ситуации. В корне отличающийся механизм это прототип. У него есть собственное название, схерали называть его "наследованием"?
Честное пионерское!!! на JavaScript можно создавать объекты на основании уже существующих просто добавляя в них свойства и методы.


автор... насколько просто в js на прототипах создать такой конструктор, ... Опять же мышление из другой философии(языка программирования) ...
Имхо в JS не стоит создавать новые объекты нужно расширять и изменять уже существующие
т.е. использование конструктора подразумевает создание объекта а не изменение уже существующего
т.е. попытка использовать классовый подход в прототипированном языке

давайте так... просто нужна аналогия. вот пример классового наследования:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
class Animal{
  public:
    Animal(int legs){
      this->legs = legs;
    }
    int getLegs(){
      return this->legs;
    }
  private:
    int legs;
}

class Rabbit: public Animal{
  public:
    Rabbit(int jumpLength): Animal(4){
      this->jumpLength = jumpLength;
    }
  private:
    int jumpLength;
}
class Human: public Animal{
  public:
    Human(int height): Animal(2){
      this->height = height;
    }
  private:
    int height;
}
class Bird: public Animal{
  public:
    Bird(bool canFly, int legs): Animal(legs){
      this->canFly = canFly;
    }
  private:
    bool canFly;
}



Каким образом можно повторить данную структуру на прототипах?

Ну то есть, что бы например вот это вернуло "2"
Код: plaintext
1.
2.
Bird b = new Bird(true, 2);
cout << b.getLegs();
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520654
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одному мне не хватает этого в js?
Ага.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520689
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин СергейAntonariyТакие бредовые высеры лишь запутывают понимание ситуации. В корне отличающийся механизм это прототип. У него есть собственное название, схерали называть его "наследованием"?
Честное пионерское!!! на JavaScript можно создавать объекты на основании уже существующих просто добавляя в них свойства и методы.Ну и при чем тут наследование?


Малыхин СергейИмхо в JS не стоит создавать новые объекты нужно расширять и изменять уже существующие
т.е. использование конструктора подразумевает создание объекта а не изменение уже существующего
т.е. попытка использовать классовый подход в прототипированном языке+1

Еще не стоит забывать, что в Java,C#,C++ и т.п. каждый класс является уникальным объектным типом, а ООП предлагает контроль и навигацию по этим типам (с помощью среды разработки), да и вообще существует, всего лишь ради одной цели — удобства разработки. JS слабо типизирован, контроль и навигация невозможны, следовательно все ооп-удобства вылетают в трубу, а вместо них появляется бахрома из всяких
Код: javascript
1.
2.
3.
4.
    __extends(Snake, _super);
    function Snake(name) {
        _super.call(this, name);
    }

которая в ООП-языках плетется компилятором, а не разработчиком, и про которую нельзя забывать в js.
Писанина должна стремиться к нулю, а функционал на ней основанный — к бесконечности.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520710
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр давайте так... просто нужна аналогия. вот пример классового наследования:
...
Каким образом можно повторить данную структуру на прототипах?Чем мой пример не подходит? Он описывает практически ту же самую структуру.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520783
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу и при чем тут наследование?
Просто я наивно полагал что наследование это механизм позволяющий создавать новый объект/класс на основе уже существующего просто добавив или изменив его свойства и методы.

В прото языках используются реальные объекты для наследования
В классовой модели наследуется описание классов родителей а не реальные объекты

Это разные подходы к наследованию
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520842
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин СергейавторНу и при чем тут наследование?
Просто я наивно полагал что наследование это механизм позволяющий создавать новый объект/класс на основе уже существующего просто добавив или изменив его свойства и методы."Наследование" слишком увязло в ООП, и при его употреблении слишком сильны ассоциации с ООП, которые подсознательно тащат в js ооп-шаблоны разработки. Однако вменяемого термина для js нет, а мое "прототипирование" даже с точки зрения русского языка выглядит коряво. В википедии используется словосочетание "прототипное наследование".
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520891
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрнасколько просто в js на прототипах создать такой конструктор, который бы в себе вызывал конструктор родителя с определённым перечнем аргументов? Насколько я знаю без дополнительных манипуляций этого сделать нельзя (то есть нету определённой в языке конструкции, которая позволила бы это сделать).конструкция есть, но весьма длинная:
http://javascript.ru/tutorial/object/inheritance#vyzov-roditelskih-metodov
только в функции extend (см. выше) надо ссылку на родительский прототип сделать.
главный минус - в таких вызовах упоминается имя класса, его сложно будет поменять.
а в остальном, каких-либо существенных недостатков такое наследование не имеет.

вообще, из ООП в js нет только инкапсуляции, приватных частей класса.
оное можно сделать замыканием, но тогда придется забыть о прототипах.
впрочем, инкапсуляция есть самый бесполезный компонент в ООП, вопрос решается соглашением об именованиях, "_" в начале и т.д.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520897
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyПрограмёр давайте так... просто нужна аналогия. вот пример классового наследования:
...
Каким образом можно повторить данную структуру на прототипах?Чем мой пример не подходит? Он описывает практически ту же самую структуру.

теоретически вполне подходит. А вот на практике )) ЭТО ЖЕ НЕ УДОБНО!!! Как по мне, то это ооооочень не удобно (если реализовывать это всё вручную, а не доверять TypeScript'у) :)

Я понимаю, что в TypeScript всё по фэншую. Но в самостоятельной реализации, разве моя this.ext чем-то уступает приведённой реализации в функционале? При том, что в разы прозрачнее работает (любой начинающий освоит принцип)
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38520961
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наследование не нужно, вот например один из подходов миксы http://jslang.info/blog/2012/functional-mixins

Валидацию параметров просто сделать метапрограммингом, но вообще это не нужно

Мультиметоды были бы классны, их не хватает, их можно сделать метапрограммированием, но в ущерб производительности.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521025
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрskyANAПрограмёр, validateArguments я бы на декоратор заменил.

Правильно понял?
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Object.prototype.validateArguments = function(types, func){
  var obj = this;
  return function(){
    if(arguments.length<types.length){
      throw new Error('too few arguments in function '+func.name);
    }
    if(arguments.length>types.length){
      throw new Error('too many arguments in function '+func.name);
    }
    for(var i=0; i<arguments.length; i++){
      if(!arguments[i].instanceOf(types[i]))
        throw new Error('argument '+(i+1)+' in function '+func.name+' must be a '+types[i]+' but '+arguments[i].constructor.name+' is given');
    }
    func.apply(obj, arguments);
  }
}



тогда объявление метода такое:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
function MyTestObject(){
  this.ext(TObject, []);
  this.tryVal = this.validateArguments(
    ['String', 'Number', 'TObject'], function tryVal(a1, a2, a3){
    }
  );
}

Правильно. Вот только зачем её в прототип запихивать, не понятно.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521042
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateНаследование не нужно, вот например один из подходов миксы http://jslang.info/blog/2012/functional-mixins

Валидацию параметров просто сделать метапрограммингом, но вообще это не нужно

Мультиметоды были бы классны, их не хватает, их можно сделать метапрограммированием, но в ущерб производительности.

ну вот с мультиметодами реализация
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
Object.prototype.ext = function(construct, args){
  construct.apply(this, args);
  this._prototypes.push(construct);
}

Object.prototype.instanceOf = function(className){
  if(this.constructor.name===className) return true;
  if(typeof(this._prototypes)==='undefined') return false;
  var res = false;
  for(var i=0; i<this._prototypes.length; i++){
    if(this._prototypes[i].name===className){
      res=true;
      break;
    }
  }
  return res;
}

Object.prototype._ = function(types, func){
  var obj = this;
  this[func.name] = function(){
    var err = TypeError();
    var trace = err.stack.split("\n").slice(3).join("\n");
    if(arguments.length<types.length){
      err.message = 'too few arguments in function '+obj.constructor.name+'.'+func.name+"\n"+trace;
      throw err;
    }
    if(arguments.length>types.length){
      err.message = 'too many arguments in function '+obj.constructor.name+'.'+func.name+"\n"+trace;
      throw err;
    }
    for(var i=0; i<arguments.length; i++){
      if(!arguments[i].instanceOf(types[i])){
        err.message = 'argument '+(i+1)+' in function '+obj.constructor.name+'.'+func.name+' must be a '+types[i]+' but '+arguments[i].constructor.name+" is given\n"+trace;
        throw err;
      }
    }
    func.apply(obj, arguments);
  }
}

Object.prototype.__ = function(types, func){
  var obj = this;
  var f = this[func.name];
  this[func.name] = function(){
    var fail = false;
    var err = TypeError();
    var trace = err.stack.split("\n").slice(3).join("\n");
    try{
      var argsType = [];
      for (var i=0; i<arguments.length; i++){
        argsType.push(arguments[i].constructor.name);
      }
      if(arguments.length<types.length){
        err.message = "there are no method "+obj.constructor.name+'.'+func.name+"("+argsType.join(", ")+")\n"+trace;
        throw err;
      }
      if(arguments.length>types.length){
        err.message = "there are no method "+obj.constructor.name+'.'+func.name+"("+argsType.join(", ")+")\n"+trace;
        throw err;
      }
      for(var i=0; i<arguments.length; i++){
        if(!arguments[i].instanceOf(types[i])){
          err.message = "there are no method "+obj.constructor.name+'.'+func.name+"("+argsType.join(", ")+")\n"+trace;
          throw err;
        }
      }
    }catch(err){
      fail = true;
      if(typeof(f)!=='undefined'){
        f.apply(obj, arguments);
      }else{
        throw err;
      }
    }
    if (!fail) func.apply(obj, arguments);
  }
}

function TObject(){
  this._prototypes=[];
}

function MyTestObject(){
  this.ext(TObject, []);
  this._(['String', 'Number', 'TObject'], function tryVal(a1, a2, a3){
    alert('hi');
  });
  
  this.__(['String', 'Number', 'TObject'], function try2(a1, a2, a3){
   alert('hi');
  });
  
  this.__(['String'], function try2(a1){
     alert('hello');
  });
}
var t = new MyTestObject();
t.try2('hi', 10, t, t);



Пока только одна проблема - это лишние данные в свойстве trace ошибки. Ну по сути, если посидеть, я думаю это решаемо.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521061
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёра не доверять TypeScript'уНет причин ему не доверять.

Програмёр ЭТО ЖЕ НЕ УДОБНО!!!О чем я и говорю. Вопросы удобства (в том числе) как раз и решает TS на синтаксическом уровне.

В википедии есть более выхолощенный пример:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var Parent = function( data ) {
    this.data = data || false;
    this.public_method = function() { return 'Public Method'; }
}
 
var Child = function() {
    this.public_method = function() { return 'Redefined public method'; }
    this.getData = function() { return 'Data: ' + this.data; }
}
 
Child.prototype = new Parent('test'); //суть прототипного наследования
var Test = new Child();
 
Test.getData(); // => "Data: test"
Test.public_method(); // => "Redefined public method"
Test.data; // => "test"
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521073
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyПрограмёра не доверять TypeScript'уНет причин ему не доверять.

Програмёр ЭТО ЖЕ НЕ УДОБНО!!!О чем я и говорю. Вопросы удобства (в том числе) как раз и решает TS на синтаксическом уровне.

В википедии есть более выхолощенный пример:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var Parent = function( data ) {
    this.data = data || false;
    this.public_method = function() { return 'Public Method'; }
}
 
var Child = function() {
    this.public_method = function() { return 'Redefined public method'; }
    this.getData = function() { return 'Data: ' + this.data; }
}
 
Child.prototype = new Parent('test'); //суть прототипного наследования
var Test = new Child();
 
Test.getData(); // => "Data: test"
Test.public_method(); // => "Redefined public method"
Test.data; // => "test"



а как сделать, что бы получилось типа такого 15391297 ? Как это сделать описанным методом я не вижу... Если это только я не вижу, тогда покажите пожалуйста. Может часть моих претензий к js просто не обоснована никак, и реализовать полноценную структуру объектов можно не прибегая к каким-либо трюкам.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521099
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёра как сделать, что бы получилось типа такого 15391297 ? http://jsfiddle.net/3AVEN/
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521126
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечПрограмёра как сделать, что бы получилось типа такого 15391297 ? http://jsfiddle.net/3AVEN/

а есть принципиальная разница между методом extend и моим методом ext? Это ведь не прямое наследование на прототипах, о котором мы говорим. Я просто определил свою цепочку прототипов (в TObject).. тут как бы без разницы, мне всего лишь показалось так удобнее (хотя да, есть и недостатки, так как метод hasOwnProperty например теряет свой смысл)... но это не суть :)

Кстати, как вам перегрузка методов? покритикуйте пожалуйста... удобно, не удобно, не нужно, нужно и удобно, но есть идеи получше и т.д.?
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521134
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот последний вариант... Нету ничего лишнего в trace, в аргументах функций допустимы значения null и undefined (хотя не знаю зачем нужно последнее в аргументе, но всё же ввёл поддержку), и добавил возврат значений из таких перегруженных методов (изначально почему-то пропустил, не о том думал видимо ).

итак, код:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
Object.prototype.ext = function(construct, args){
  construct.apply(this, args);
  this._prototypes.push(construct);
}

Object.prototype.instanceOf = function(className){
  if(this.constructor.name===className) return true;
  if(typeof(this._prototypes)==='undefined') return false;
  var res = false;
  for(var i=0; i<this._prototypes.length; i++){
    if(this._prototypes[i].name===className){
      res=true;
      break;
    }
  }
  return res;
}

Object.prototype._ = function(types, func){
  var obj = this;
  this[func.name] = function(){
    var err = TypeError();
    var trace = err.stack.split("\n").slice(3).join("\n");
    if(arguments.length<types.length){
      err.message = 'too few arguments in function '+obj.constructor.name+'.'+func.name+"\n"+trace;
      throw err;
    }
    if(arguments.length>types.length){
      err.message = 'too many arguments in function '+obj.constructor.name+'.'+func.name+"\n"+trace;
      throw err;
    }
    for(var i=0; i<arguments.length; i++){
      if((arguments[i]===null && types[i]!=="null") 
      || (typeof(arguments[i])==='undefined' && types[i]!=='undefined') 
      || !arguments[i].instanceOf(types[i])
      ){
        err.message = 'argument '+(i+1)+' in function '+obj.constructor.name+'.'+func.name+' must be a '+types[i]+' but '+
                      arguments[i].constructor.name+" is given\n"+trace;
        throw err;
      }
    }
    func.apply(obj, arguments);
  }
}

Object.prototype.__ = function(types, func){
  var obj = this;
  var f = this[func.name];
  this[func.name] = function(){
    var fail = false;
    var err = TypeError();
    err.validateArgumentsError = true;
    var trace = err.stack.split("\n").slice(3).join("\n");
    try{
      try{
        var argsType = [];
        for (var i=0; i<arguments.length; i++){
          argsType.push(arguments[i]!==null && typeof(arguments[i])!=='undefined' 
                      ? arguments[i].constructor.name 
                      : (arguments[i]===null ? 'null' : 'undefined')
          );
        }
        if(arguments.length<types.length){
          err.message = "there are no method "+obj.constructor.name+'.'+func.name+"("+argsType.join(", ")+")\n"+trace;
          throw err;
        }
        if(arguments.length>types.length){
          err.message = "there are no method "+obj.constructor.name+'.'+func.name+"("+argsType.join(", ")+")\n"+trace;
          throw err;
        }
        for(var i=0; i<arguments.length; i++){
          if((arguments[i]===null && types[i]!=="null") 
          || (typeof(arguments[i])==='undefined' && types[i]!=='undefined') 
          || !arguments[i].instanceOf(types[i])
          ){
            err.message = "there are no method "+obj.constructor.name+'.'+func.name+"("+argsType.join(", ")+")\n"+trace;
            throw err;
          }
        }
      }catch(error){
        fail = true;
        if(typeof(f)!=='undefined'){
          return f.apply(obj, arguments);
        }else{
          throw error;
        }
      }
      if (!fail) {return func.apply(obj, arguments);}
    }catch(higherLevelError){
      if(higherLevelError.validateArgumentsError){
        throw err;
      }else{
        throw higherLevelError;
      }
    }
  }
}

function TObject(){
  this._prototypes=[];
}




использовать вот так:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
function MyTestObject(){
  this.ext(TObject, []);
  this._(['String', 'Number', 'TObject'], function tryVal(a1, a2, a3){
    alert('hi');
  });
  
  this.__(['String', 'Number', 'TObject'], function try2(a1, a2, a3){
   alert('hi');
  });
  
  this.__(['String'], function try2(a1){
     return a1;
  });
}

var t = new MyTestObject();
alert(t.try2('hello', 'hi'));
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521135
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёра есть принципиальная разница между методом extend и моим методом ext? Это ведь не прямое наследование на прототипах, о котором мы говорим. Я просто определил свою цепочку прототипов (в TObject)как я понимаю, ты отказался от методов в прототипах, и теперь для каждого экземпляра создаются новые методы.
это плохо, неэкономно.
к тому же нельзя позже добавить методы в базовый класс, так чтобы они были видны в дочерних.

ПрограмёрКстати, как вам перегрузка методов? покритикуйте пожалуйста... удобно, не удобно, не нужно, нужно и удобно, но есть идеи получше и т.д.?первый же вопрос - как вызывать родительский вариант из дочернего? возможно такое?
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521146
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечПрограмёра есть принципиальная разница между методом extend и моим методом ext? Это ведь не прямое наследование на прототипах, о котором мы говорим. Я просто определил свою цепочку прототипов (в TObject)как я понимаю, ты отказался от методов в прототипах, и теперь для каждого экземпляра создаются новые методы.
это плохо, неэкономно.
к тому же нельзя позже добавить методы в базовый класс, так чтобы они были видны в дочерних.

ПрограмёрКстати, как вам перегрузка методов? покритикуйте пожалуйста... удобно, не удобно, не нужно, нужно и удобно, но есть идеи получше и т.д.?первый же вопрос - как вызывать родительский вариант из дочернего? возможно такое?

как и ранее при таком методе наследования, с небольшим изворотом (не знаю, может представленный Вами метод лишён данного недостатка, ещё не разобрался):
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
function MyTestObject(){
  this.ext(TObject, []);
  
  this.__(['String', 'Number'], function try2(a1, a2){
   return a1+a2;
  });
  
  this.__(['String'], function try2(a1){
     return a1;
  });
  
  this._(['Number'], function onlyValidate(num){
     return num*2;
  })
}

function Child(){
  this.ext(MyTestObject, []);
  
  var parentTry2 = this.try2;
  this.__(['String', 'Number'], function try2(a1, a2){
    return parentTry2(a1, a2*2);
  })
}

var t = new Child();
alert(t.try2('hello'));
alert(t.try2('hello', 10));
alert(t.onlyValidate(8));
t.try2(1, 2);



код alert(t.try2('hello', 10)); выведет "hello20". То есть метод благополучно перекрыт и из него вызван метод предка.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521347
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрдавайте так... просто нужна аналогия. вот пример классового наследования:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
class Animal{
  public:
    Animal(int legs){
      this->legs = legs;
    }
    int getLegs(){
      return this->legs;
    }
  private:
    int legs;
}

class Rabbit: public Animal{
  public:
    Rabbit(int jumpLength): Animal(4){
      this->jumpLength = jumpLength;
    }
  private:
    int jumpLength;
}
class Human: public Animal{
  public:
    Human(int height): Animal(2){
      this->height = height;
    }
  private:
    int height;
}
class Bird: public Animal{
  public:
    Bird(bool canFly, int legs): Animal(legs){
      this->canFly = canFly;
    }
  private:
    bool canFly;
}



Каким образом можно повторить данную структуру на прототипах?
Пойдет такой вариант?

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
function Animal(Obj) {
	Obj=Obj||{};
	this.legs=Obj.legs;
	this.getLegs=function() {
		alert(this.legs);
	};
};
function Rabbit(Obj) {
	this.legs = 4;
	this.jumpLength=Obj.jumpLength;
};
Rabbit.prototype = new Animal();
big = new Rabbit({jumpLength: 10});
small = new Rabbit({jumpLength: 5});
big.getLegs();
alert(small.jumpLength);
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521411
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

это ведь шутка? ))
Если нет, то точно не подойдёт, так как это сейчас у нас в предке только одно свойство legs которое считается обычным присваиванием. А если бы это было значение, высчитывающееся по сложной формуле исходя из входного параметра конструктора? Правильно я понимаю, в данном случае пришлось бы повторять эту формулу в конструкторах всех потомков? А если таких свойств у объекта-предка дофига?

В общем, если я не ошибся, то вариант не супер. :)
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521489
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрэто сейчас у нас в предке только одно свойство legs которое считается обычным присваиванием. А если бы это было значение, высчитывающееся по сложной формуле исходя из входного параметра конструктора? Правильно я понимаю, в данном случае пришлось бы повторять эту формулу в конструкторах всех потомков?
Меня всегда удивляли такого рода "задания"... Типа "сделайте вот так"! Сделаешь - а тебе тут же "но это-то просто! а у меня вона как дальше сложно и много!"
И что после этого делать? Писать все за тебя точно никто "забесплатно" не будет...

ПрограмёрА если таких свойств у объекта-предка дофига?
Да какая разница сколько их штук? Они все и занаследуются...

ПрограмёрВ общем, если я не ошибся, то вариант не супер. :)
В конечном счете решать-то тебе...
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521506
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр , можно и так вот сделать...

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function Animal(Legs) {
	this.legs=Legs;
	this.getLegs=function() {
		alert(this.legs);
	};
};
function Rabbit(jumpLength) {
	this.jumpLength=jumpLength;
};
Rabbit.prototype = new Animal(4);
big = new Rabbit(10);
small = new Rabbit(5);
big.getLegs();
alert(small.jumpLength);
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521559
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

А за меня делать не надо )) Я не пишу никакое js приложение сейчас. Это как-бы в целях самообразования, а структуру приведённую я от балды взял, Вы же не думаете, что мне в скрипте нужен подсчёт людей и птичек )))

в последнем варианте возможно создать аналог класса Bird? То есть с прокидыванием одного аргумента в конструктор Animal (не перекрывая в Bird)?

Если возможно, тогда соглашусь, что данный вариант позволяет воссоздать если не любой функционал классового наследования, то почти любой в любом случае.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521629
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёриспользовать вот так:
Код: javascript
1.
2.
this.ext(TObject, []);
  this._(['String', 'Number', 'TObject'],

Программирование этой перегруженной скобками рутины в итоге займет больше времени, чем программирование самой бизнес-логики на получившихся объектах. Среда, поддерживающая язык, поддерживающий перегрузку нативно, предложит варианты перегрузок с перечнем параметров, а в js никаких подсказок от этих костылей ждать не приходится, все перегрузки известны лишь их автору. Нормальных подсказок по свойствам и методам объектов тоже не будет (куцая кое-где есть) — следствие слабой типизации. Но со временем и автор начнет забывать и структуру объектов и варианты перегрузок, а если следовать всем-всем правилам разработки, то все это еще и документировать нужно. Получается, кучу времени программист работает вхолостую, а бонусов от использования принципов ООП нет и не предвидится.

Так в чем же тут профит по сравнению с обычным лапшекодом, делающим тоже самое, но как минимум вдвое короче?
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521822
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрВы же не думаете, что мне в скрипте нужен подсчёт людей и птичек )))
Почем мне знать... Это ведь ты пример привел, не я.

Програмёрв последнем варианте возможно создать аналог класса Bird? То есть с прокидыванием одного аргумента в конструктор Animal (не перекрывая в Bird)?
Даже в последнем моем варианте видна "независимость" аргументов "животного" от "кролика"...

Я правильно понял про птиц?

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
function Animal(Legs) {
	this.legs=Legs;
	this.getLegs=function() {
		alert(this.legs);
	};
};
function Rabbit(jumpLength) {
	this.jumpLength=jumpLength;
};
function Bird(canFly,Legs) {
	this.canFly=canFly;
};
Bird.prototype = new Animal(2);
sparrow = new Bird(false);
sparrow.getLegs();
alert(sparrow.canFly);
eagle = new Bird(true);
eagle.getLegs();
alert(eagle.canFly);
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521838
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

про птиц немного не так. Представим, что мифический грифон - это тоже птица )) У него 4 ноги (лапы), а у ястреба 2. Так вот, задумка была в написании Bird таким образом, что бы без лишних изворотов в итоге можно было создать обе эти птички (опять же не переопределяя это свойство в потомке, так как это у нас присваивание простого значения, но если значение будет считаться по сложному алгоритму, сами понимаете, в каждом конструкторе его дублировать - не айс).
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521844
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрпро птиц немного не так. Представим, что мифический грифон - это тоже птица )) У него 4 ноги (лапы), а у ястреба 2.
Аааа... Вона какая птица!
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521851
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyПрограмёриспользовать вот так:
Код: javascript
1.
2.
this.ext(TObject, []);
  this._(['String', 'Number', 'TObject'],

Программирование этой перегруженной скобками рутины в итоге займет больше времени, чем программирование самой бизнес-логики на получившихся объектах. Среда, поддерживающая язык, поддерживающий перегрузку нативно, предложит варианты перегрузок с перечнем параметров, а в js никаких подсказок от этих костылей ждать не приходится, все перегрузки известны лишь их автору. Нормальных подсказок по свойствам и методам объектов тоже не будет (куцая кое-где есть) — следствие слабой типизации. Но со временем и автор начнет забывать и структуру объектов и варианты перегрузок, а если следовать всем-всем правилам разработки, то все это еще и документировать нужно. Получается, кучу времени программист работает вхолостую, а бонусов от использования принципов ООП нет и не предвидится.

Так в чем же тут профит по сравнению с обычным лапшекодом, делающим тоже самое, но как минимум вдвое короче?

тут не могу не согласиться... перечисленные проблемы имеют место. Но разве то же самое нельзя сказать и о функционале фреймворков? Например те же ExtJS и YUI позволят нормально задокументировать классы с помощью например JSDoc и будет ли тот же eclipse подсказывать название классов созданных с помощью озвученных фреймворков.

Однако ними же пользуются.. и пользуются достаточно большое количество программистов.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521856
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaПрограмёрпро птиц немного не так. Представим, что мифический грифон - это тоже птица )) У него 4 ноги (лапы), а у ястреба 2.
Аааа... Вона какая птица!

ничего другого в голову не пришло, летающего и имеющего при этом больше 2 лап
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521861
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,
Объект "Птичка":

Птичка.нога1=0;
Птичка.нога2=1;
----------
Птичка.нога3=2;
Птичка.нога4=3;

Для грифона будет Птичка.length будет 4, а для всех остальных птичек - 2.
Типа, if( Птичка.length>2) alert("Грифон детектед");
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521887
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вариант с "разноногими" птицами + "сложное вычисление" параметров для "животного"...

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
function Animal(Legs) {
	this.legs=calcLegs(Legs);
	this.getLegs=function() {
		alert(this.legs);
	};
	function calcLegs(Legs){
		return Legs+' шт.';
	};
};
function Bird(Legs,canFly) {
	Animal.apply(this,arguments);
	this.canFly=canFly;
};
Bird.prototype = new Animal();
griffin = new Bird(4,true);
griffin.getLegs();
alert(griffin.canFly);
chicken = new Bird(2,false);
chicken.getLegs();
alert(chicken.canFly);
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521916
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaВот вариант с "разноногими" птицами + "сложное вычисление" параметров для "животного"...

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
function Animal(Legs) {
	this.legs=calcLegs(Legs);
	this.getLegs=function() {
		alert(this.legs);
	};
	function calcLegs(Legs){
		return Legs+' шт.';
	};
};
function Bird(Legs,canFly) {
	Animal.apply(this,arguments);
	this.canFly=canFly;
};
Bird.prototype = new Animal();
griffin = new Bird(4,true);
griffin.getLegs();
alert(griffin.canFly);
chicken = new Bird(2,false);
chicken.getLegs();
alert(chicken.canFly);



И дошли до раскрытия (развёртывания) представленного мной варианта с некоторыми переработками.
1. Зачем в прототип писать полноценный объект, если точно тот же объект с расширенными возможностями станет результирующим. То есть по сути создаётся одна дополнительная копия объекта, все свойства которого перекрыты потомком.
2. Если я на входе конструктора Animal ожидаю объект, с которым собираюсь проводить некоторые манипуляции (например это массив, и я хочу получить его длину и т.д.), то Bird.prototype = new Animal(); может привести к ошибке, если я не предусмотрю такой вызов. А причина моих попыток как-раз в том, что бы как можно больше предусматривалось автоматически, то есть не писать лишней логики.

Вместо этих двух пунктов я просто ввёл собственную цепочку прототипов (точнее их конструкторов) и обернул такое "наследование" в отдельный метод.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521924
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeПрограмёр,
Объект "Птичка":

Птичка.нога1=0;
Птичка.нога2=1;
----------
Птичка.нога3=2;
Птичка.нога4=3;

Для грифона будет Птичка.length будет 4, а для всех остальных птичек - 2.
Типа, if( Птичка.length>2) alert("Грифон детектед");

тут не понял :) Возможно мысль хорошая, но я даже идеи не понял (что бы как-то подумать о реализации).
Можно как-то более по-народному? Ну или пример в коде, без разницы :)
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38521950
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр1. Зачем в прототип писать полноценный объект, если точно тот же объект с расширенными возможностями станет результирующим. То есть по сути создаётся одна дополнительная копия объекта, все свойства которого перекрыты потомком.
2. Если я на входе конструктора Animal ожидаю объект, с которым собираюсь проводить некоторые манипуляции (например это массив, и я хочу получить его длину и т.д.), то Bird.prototype = new Animal(); может привести к ошибке, если я не предусмотрю такой вызов. А причина моих попыток как-раз в том, что бы как можно больше предусматривалось автоматически, то есть не писать лишней логики.
Я х/з что ты опять пытаешся объяснить...
Но суть от этого не поменяется.
Есть вот такой вот язык... С вот такими вот возможностями... Что тебе с ним делать и как использовать - решать тебе.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38522081
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёртут не могу не согласиться... перечисленные проблемы имеют место. Но разве то же самое нельзя сказать и о функционале фреймворков? Можно.

ПрограмёрОднако ними же пользуются.. и пользуются достаточно большое количество программистов.Ну так они уже кем-то написаны, оттестированы, прекрасно задокументированы, обладают встроенным спектром решений конкретных прикладных задач, а не только абстрактных программистских, и сделаны максимально удобными в использовании. Заказчики не приходят с абстрактными задачами, за их решение не платят зарплату, так что сами по себе они никому не интересны. Никто из разработчиков популярных фреймворков не вываливал полусырую идею в интернеты с вопросом "а только ли нам этого не хватает?". Если бы они так сделали, то и получили бы такой же ответ — ага, только вам.

Перегрузка не удобна в использовании и не взлетит. Наследование может и да, законченной реализации в твоем исполнении пока не видно.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38522127
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyПрограмёртут не могу не согласиться... перечисленные проблемы имеют место. Но разве то же самое нельзя сказать и о функционале фреймворков? Можно.

ПрограмёрОднако ними же пользуются.. и пользуются достаточно большое количество программистов.Ну так они уже кем-то написаны, оттестированы, прекрасно задокументированы, обладают встроенным спектром решений конкретных прикладных задач, а не только абстрактных программистских, и сделаны максимально удобными в использовании. Заказчики не приходят с абстрактными задачами, за их решение не платят зарплату, так что сами по себе они никому не интересны. Никто из разработчиков популярных фреймворков не вываливал полусырую идею в интернеты с вопросом "а только ли нам этого не хватает?". Если бы они так сделали, то и получили бы такой же ответ — ага, только вам.

Перегрузка не удобна в использовании и не взлетит. Наследование может и да, законченной реализации в твоем исполнении пока не видно.

ясное дело я 20 строчек кода не буду пытаться протолкнуть как гениальный, полноценный фреймворк... Просто идея появилась, решил уточнить (перед длительным сидением над некому не нужной реализацией). Пока явных "фе" не было )) Всё сводится к незаконченности идеи :)
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38522145
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр1. Зачем в прототип писать полноценный объект, если точно тот же объект с расширенными возможностями станет результирующим. То есть по сути создаётся одна дополнительная копия объекта, все свойства которого перекрыты потомком.
2. Если я на входе конструктора Animal ожидаю объект, с которым собираюсь проводить некоторые манипуляции (например это массив, и я хочу получить его длину и т.д.), то Bird.prototype = new Animal(); может привести к ошибке, если я не предусмотрю такой вызов. А причина моих попыток как-раз в том, что бы как можно больше предусматривалось автоматически, то есть не писать лишней логики.

Вместо этих двух пунктов я просто ввёл собственную цепочку прототипов (точнее их конструкторов) и обернул такое "наследование" в отдельный метод.именно эти два пункта учтены в том варианте, который я привел 15393424 - там создается стандартная цепочка прототипов, но без полноценного объекта в прототипе.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38522322
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечПрограмёр1. Зачем в прототип писать полноценный объект, если точно тот же объект с расширенными возможностями станет результирующим. То есть по сути создаётся одна дополнительная копия объекта, все свойства которого перекрыты потомком.
2. Если я на входе конструктора Animal ожидаю объект, с которым собираюсь проводить некоторые манипуляции (например это массив, и я хочу получить его длину и т.д.), то Bird.prototype = new Animal(); может привести к ошибке, если я не предусмотрю такой вызов. А причина моих попыток как-раз в том, что бы как можно больше предусматривалось автоматически, то есть не писать лишней логики.

Вместо этих двух пунктов я просто ввёл собственную цепочку прототипов (точнее их конструкторов) и обернул такое "наследование" в отдельный метод.именно эти два пункта учтены в том варианте, который я привел 15393424 - там создается стандартная цепочка прототипов, но без полноценного объекта в прототипе.

Вполне полноценный и работоспособный подход. Есть явные преимущества перед предложенным мной? Цепочка прототипов заполняется, однако всё-ровно не совсем полноценно. например alert(b.constructor.prototype._legs); вместо ожидаемого "2" выведет "undefined" :)
В общем ничего против такого варианта не имею, но имеет смысл менять привычку только если в новом варианте есть преимущества. Так что, если есть, прошу пояснить.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38522350
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрЦепочка прототипов заполняется, однако всё-ровно не совсем полноценно. например alert(b.constructor.prototype._legs); вместо ожидаемого "2" выведет "undefined" :)и это правильно.
суть в том, что все данные должны быть в составе объекта, а общие данные (в 99% случаев - функции) - в составе цепочки прототипов.

ПрограмёрЕсть явные преимущества перед предложенным мной?как уже говорилось, работает механизм добавления методов во все промежуточные классы, который изначально предусмотрен в js.
т.е. я могу отдельно добавить метод в Bird.prototype, тогда он будет виден объектам Bird и наследникам.
а если добавлю метод в Animal.prototype, он виден в объектах Animal и наследниках.

ну и тот факт, что для каждого экземпляра объекта не создаются отдельные экземпляры функции.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38522356
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечПрограмёрЦепочка прототипов заполняется, однако всё-ровно не совсем полноценно. например alert(b.constructor.prototype._legs); вместо ожидаемого "2" выведет "undefined" :)суть в том, что все данные должны быть в составе объектапредставь, что _legs - не число, а массив, куда в ходе работы что-то добавляется.
окажись он в прототипе, был бы один общий массив для всех экземпляров.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38530224
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрВсем привет.

Мне вдруг стало интересно, одному мне это в js мешает при решении более-менее сложных задач:
1. отсутствие полноценного механизма наследования
2. отсутствие проверки на валидность переданных в функцию параметров
3. отсутствие возможности перегрузки методов (при разных входных параметрах разная логика)


Нет нетолко вам. Но нет в мире совершенства!!
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38530525
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема многих, кому чегото не хватает в javascript, в том что приходя в javascript они мыслят и пытаются использовать его как предыдущий язык.

Чего греха таить - я тоже после C# хотел классов, но после изучения языка и многих лет работы мне становится смешно, когда ктото в очередной раз хочет классов в javascript)

В монолитных приложениях, когда весь код сразу на месте - это может и необходимость, но в фронтэнде как правило необходимые модули подгружаются динамически, что сводит на нет использование классов.

JavaScript тем и прекрасен, что в нем нет строгой типизации, помню сколько огорода приходилось городить на C# чтобы иметь возможность обрабатывать различные типы классов в одно коде. Чур меня чур от такого!)

JavaScript гибок, легок и прекрасен именно в таком виде какой он есть и переделывать его не надо - надо переделывать программистов, которые хотят его переделать) Не хотите всех его плюшек - переходите на другие языки
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38530559
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spПроблема многих, кому чегото не хватает в javascript, в том что приходя в javascript они мыслят и пытаются использовать его как предыдущий язык.

Чего греха таить - я тоже после C# хотел классов, но после изучения языка и многих лет работы мне становится смешно, когда ктото в очередной раз хочет классов в javascript)

В монолитных приложениях, когда весь код сразу на месте - это может и необходимость, но в фронтэнде как правило необходимые модули подгружаются динамически, что сводит на нет использование классов.

JavaScript тем и прекрасен, что в нем нет строгой типизации, помню сколько огорода приходилось городить на C# чтобы иметь возможность обрабатывать различные типы классов в одно коде. Чур меня чур от такого!)

JavaScript гибок, легок и прекрасен именно в таком виде какой он есть и переделывать его не надо - надо переделывать программистов, которые хотят его переделать) Не хотите всех его плюшек - переходите на другие языки

Переход на другой язык не представляется возможным... Как-то я себе не представляю как клиентскую часть сайта возможно написать на С#, не написав собственный интерпретатор :)

А как различные типы классов в одном коде то обрабатывать? Если вызывать методы класса, или обращаться к определённым свойствам, то для этого и придумали наследование и интерфейсы (просто структуру классов надо правильно строить).

И как динамическая подгрузка сводит на нет использование классов? В пхп include тоже динамически код грузит, но там это никак не мешает использовать классовое ООП на полную катушку.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38531244
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрА как различные типы классов в одном коде то обрабатывать? Если вызывать методы класса, или обращаться к определённым свойствам, то для этого и придумали наследование и интерфейсы (просто структуру классов надо правильно строить).

javascript тем и хорош что в нем не нужна никакая структура классов, что в одном коде обработать любые, т.е. абсолютно любые заранее неизвестные структуры данных! И только благодаря отсутствию строгой типизации и прототипной структуре наследование такая гибкость доступна в этом языке.

ПрограмёрИ как динамическая подгрузка сводит на нет использование классов? В пхп include тоже динамически код грузит, но там это никак не мешает использовать классовое ООП на полную катушку.

Динамическая подгрузка в таком случае сводится не подгрузке одного класса а всей иерархии классов сразу - что лишает смысла динамическую подгрузку в целом!
Перестаньте мыслить классами, думайте лучше о мелких функциональных модулях или о mixins - этот шаблон проектирования наиболее распространен в javascrip программировании - обратите внимание на Node.js - там этот шаблон используется на полную катушку и причем очень продуктивно
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38531320
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spjavascript тем и хорош что в нем не нужна никакая структура классов, что в одном коде обработать любые, т.е. абсолютно любые заранее неизвестные структуры данных

то есть js Вам нравится тем, что перед тем как что-то написать не надо думать и проектировать? Начал писать, а дальше уж как пойдёт?! :)

Но основная суть всё-же не в этом... Как уже писал, мне больше всего не хватает перегрузки методов, когда один метод с разными аргументами работает по-разному, при чём без дополнительной логики в теле метода. Этого я как-раз таки и добился (хотя пришлось в итоге некоторые изменения внести, так как IE как всегда не очень понравились некоторые моменты :)) + для оптимизации по скорости).

spДинамическая подгрузка в таком случае сводится не подгрузке одного класса а всей иерархии классов сразу - что лишает смысла динамическую подгрузку в целом!

Повторюсь... php также умеет грузить код частями и динамически, при этом классовое ООП и динамическая подгрузка кода там очень даже хорошо уживаются (взять тот же yii с его достаточно сложной структурой и "lazy loading"). При динамической загрузке грузить надо не всю иерархию классов (в моём случае модулей, так как у меня основная делёжка не по классам, а по модулям), а только зависимости для данного модуля.

Насчёт mixin, а чем он лучше множественного наследования (чем так принципиально отличается)? Ведь в принципе то же самое, за исключением вызова конструкторов предков (подобно наследованию от нескольких классов без конструкторов). Нет, конечно на уровне языка, отличие в реализации очень большое... Но вот уже на уровне создания приложения - я не понимаю особой разницы. Ну да, паттерн mixin позволяет расширить функционал отдельного объекта, что не принято делать при классовом наследовании. Однако "не принято", не значит "запрещено" :)
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38532603
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

ну зачем вы специально все утрируете?))
если у вас есть молоток, но вы привыкли работать с топором - зачем переделывать молоток под топор. чтоб забивать им гвозди???
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38532613
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spПрограмёр,

ну зачем вы специально все утрируете?))
если у вас есть молоток, но вы привыкли работать с топором - зачем переделывать молоток под топор. чтоб забивать им гвозди???

У меня есть опыт работы с топором (дэлфи и php), и есть в руках молоток (js), кстати, есть и опыт работы с ним. Так вот я как-раз хочу сделать молоток таким, что бы одной стороной можно было гвозди забивать удобно, а повернув - дрова рубить )). То есть я к молотку просто стараюсь прикрутить функцию топора, при этом как можно меньше ограничив оригинальные функции инструмента.

Пока удаётся... ))

в копилку кстати свалилась возможность быстрой выборки элементов DOM по селектору (по производительности сравнима с jQuery), а также инструмент для анимаций (он кстати по производительности не уступает jQuery, пока на глаз с анимированием в несколько десятков элементов).

С новыми доработками пишется очень удобно... надеюсь что-то в итоге и получится ))
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38532639
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрв копилку кстати свалилась возможность быстрой выборки элементов DOM по селектору (по производительности сравнима с jQuery), а также инструмент для анимаций (он кстати по производительности не уступает jQuery, пока на глаз с анимированием в несколько десятков элементов).

С новыми доработками пишется очень удобно... надеюсь что-то в итоге и получится ))

Выборка по DOM - querySelectorAll(), анимация - CSS3 Animation.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38533786
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_stПрограмёрв копилку кстати свалилась возможность быстрой выборки элементов DOM по селектору (по производительности сравнима с jQuery), а также инструмент для анимаций (он кстати по производительности не уступает jQuery, пока на глаз с анимированием в несколько десятков элементов).

С новыми доработками пишется очень удобно... надеюсь что-то в итоге и получится ))

Выборка по DOM - querySelectorAll(), анимация - CSS3 Animation.

querySelectorAll() - это да... штука хорошая... Именно её и использовал у себя. Но сама по себе выборка не несёт смысла без методов быстрого изменения свойств элементов и тому подобное (как в jQuery)

CSS3 Animation - до IE10 про неё можно забыть... если там и есть какая-либо поддержка, то как минимум animation-timing-function в ie ниже 10 не поддерживается.
В итоге да, можно и его использовать, но ещё рано.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38533816
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрНо сама по себе выборка не несёт смысла без методов быстрого изменения свойств элементов и тому подобное (как в jQuery)да не сказал бы.
"быстрое изменение свойств" (как я понимаю, методы вроде .css(), .val() и т.д.) и в цикле нетрудно сделать.
а вот без селекторов иногда придется люто г-кодить.
очень крутой механизм.
хотя нативные селекторы несколько уступают jQuery. Основное отличие - jQuery умеет "заглядывать внутрь" - селекторы ":has" и т.д., которых нет в css.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38533854
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх с точки зрения семантики, лаконичности и гибкости с моей субъективной точки зрения JavaScript лучший язык.

Как я скучаю по его гибкости в Java.
Как парит громоздкость в PL\SQL.
Как устал от этих begin \ end в дельфи (хотя они же есть и в PL\SQL и в pgSQL и еще вопрос где они появились раньше).
В С++ просто до смеху доходят с их "завихрениями" в ООП )) - вот реально надоела его STL и этот Boost, да еще и MS Visual IDE сделано ну не для RAD.

Везде есть плюсы и минусы - ну вот к примеру кто видел крутой 3D движок на JavaScript с миллионом треугольников в сцене и материалами - а многопотоковость ? вот вот.

Хочешь халяву юзай Java. Накопил штуку баксов купи MS Visual и пиши С++,
накопил три штуки баксов купи Delphi.
Накопил 548.913 $ купил оракл )))
Потом плюнул на тормоза и заменил бесплатным постгресом )

Но в любом случае я люблю эти языки - и они хороши по своему - в каждом своем отдельном применении.

P.S> Да убережет Вас рука от холивара )
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534076
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Judoс точки зрения семантики, лаконичности и гибкости с моей субъективной точки зрения JavaScript лучший язык.+1 (тоже субъективный)
Judoну вот к примеру кто видел крутой 3D движок на JavaScript с миллионом треугольников в сцене и материаламиэто удел С++ - наверно, единственного языка, которому js не может составить конкуренцию.
Judoа многопотоковость ?многопотоковость не относится к языку - это фича среды выполнения.
и кстати в современных браузерах она есть - https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534126
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечJudoс точки зрения семантики, лаконичности и гибкости с моей субъективной точки зрения JavaScript лучший язык.+1 (тоже субъективный)
Judoну вот к примеру кто видел крутой 3D движок на JavaScript с миллионом треугольников в сцене и материаламиэто удел С++ - наверно, единственного языка, которому js не может составить конкуренцию. тынц лучше всего в ff
Яростный Мечмногопотоковость не относится к языку - это фича среды выполнения.
и кстати в современных браузерах она естьИ используется как раз для подсчета треугольничков. Кроме матана, воркерам нечего делать, к dom'у из них нельзя обращаться.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534138
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyКроме матана, воркерам нечего делатьпо-хорошему это везде так. Ввод/вывод правильнее делать асинхронными, а все прочие долгие операции - вычисления.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534152
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Judoс миллионом треугольников в сценеТреугольники это дедушки шейдеров. Нафига нужны миллионы треугольников, если с помощью шейдеров можно имитировать любой рельеф на абсолютно плоской поверхности?

Judoи материаламиНу вот конкретно материалы и шейдеры, но уже на другом движке.
На нем же.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534167
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечJudoс точки зрения семантики, лаконичности и гибкости с моей субъективной точки зрения JavaScript лучший язык.+1 (тоже субъективный)
Judoну вот к примеру кто видел крутой 3D движок на JavaScript с миллионом треугольников в сцене и материаламиэто удел С++ - наверно, единственного языка, которому js не может составить конкуренцию.
Judoа многопотоковость ?многопотоковость не относится к языку - это фича среды выполнения.
и кстати в современных браузерах она есть - https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers
Меч тут ты прав, мне всегда подымают настроение люди которые говорят что Дельфи это паскаль)). Еще более интересно слышать от них новость что С++ быстрее в РанТайме на 30%. Да это возможно было во времена динозавров и Дельфи 3 но не позже )). Уже в 4 компилятор оптимизировали и VCL давно уж как снабдили ассемб вставками. Ну я полность за то чтобы большинство компании покупали себе MS C++ компайлер нанимали сотню програмегггов и писали годами ПО на своем псевдо RAD. Меньше конкуренция проще жить)) Людям не запретишь думать что земля плоская и мы единственные высшие существа во вселенной)
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534173
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyJudoс миллионом треугольников в сценеТреугольники это дедушки шейдеров. Нафига нужны миллионы треугольников, если с помощью шейдеров можно имитировать любой рельеф на абсолютно плоской поверхности?

Judoи материаламиНу вот конкретно материалы и шейдеры, но уже на другом движке.
На нем же.

Не путайте геометрию с материалами)
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534193
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Judo,

В общем, графических возможностей у браузеров уже больше, чем было 10 лет назад у целого компьютера с 3д-ускорителем :)

Не в недостаче треугольников проблема — идей нет. Технологий выдумывается больше, чем конечных продуктов на них.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534202
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyJudo,

В общем, графических возможностей у браузеров уже больше, чем было 10 лет назад у целого компьютера с 3д-ускорителем :)

Не в недостаче треугольников проблема — идей нет. Технологий выдумывается больше, чем конечных продуктов на них.

Покажи доказательство JavaScript с использованием Cuda и PhysX (тогда поболтаем про 10 лет)) ?
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534209
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyНе в недостаче треугольников проблема — идей нет.+100

иногда думаю - эх, вернуться бы с накопленными знаниями лет на 10-15 назад - щас был бы владельцем всяких твиттеров-фейсбуков, а не г-кодером рядовым...
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534481
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoПокажи доказательство JavaScript с использованием Cuda и PhysX (тогда поболтаем про 10 лет)) ?10 лет назад PhysX еще не было, так что за доказательствами проходи мимо.

Вопрос в другом — нафига? Этими свистелками затыкают все тот же кризис идей. У нас реалистическая физическая модель!11 — вопят производители контента, соря релевантными аббревиатурами, а как взглянешь, ради чего эта физика — зальешься кровавыми слезами.

Это во-первых, а во-вторых, что, без свистелок уже и физику посчитать невозможно? Да на . PhysX может работать без всякой куды, и я однажды специально гонял игрушку на видеокарте ATI (тогда еще) со включенной физикой и выключенной. Процессор разницы не заметил, фпс почти не изменился.

Вклад физики в общую нагрузку настолько мал, что браузер с js ее так же не заметит, как и ЦП. Конечно, при реализации физики прямыми руками.

К слову, 3d-движок BananaBread переведен на js как раз с с++, причем какой-то автоматизированной тулзой. Что мешает перевести тот кусок PhysX, который не юзает Куду?
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534939
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyJudoПокажи доказательство JavaScript с использованием Cuda и PhysX (тогда поболтаем про 10 лет)) ?10 лет назад PhysX еще не было, так что за доказательствами проходи мимо.

Вопрос в другом — нафига? Этими свистелками затыкают все тот же кризис идей. ......

Это все слова которые любят произносить теоретики. Вот приведи пример какой нибудь солидной 3D MMORPG минимум с хотя бы 30 игроками в локации, движок которой сделан на JavaScript ? а потом оценим ее качество графики ))

Хорошая идея возникает у одного человека из тысячи, а может быть из десяти тысяч. И она еще может взлететь а может и нет, что зависит от страны где он живет, инвестиций и правильного продвижения. А может так и остаться никому не известной. Так было и так будет. А кризис идей это просто красивые слова.

P.S> И чего он так взъелся ?)))
-----
Не путайте самолеты с подводными лодками - каждый язык хорош в своей области применения
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534944
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Возьметесь сделать аналог Assasin's Creed Black Flag на JavaScipt (с таким же уровнем графики) ?
А мы заплатим (без шуток)
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534963
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Готов освоить бюджет в 200 000 000 $ на разработку игры которую невозможно защитить от пиратов (без шуток)
с таким же уровнем графики
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38534987
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoВот приведи пример какой нибудь солидной 3D MMORPG минимум с хотя бы 30 игроками в локации, движок которой сделан на JavaScript ? а потом оценим ее качество графики ))А эталоном будет Assasin's Creed?

Игры такого уровня делают годами, а webgl дай бог года три исполнилось, как и веб-сокетам, без которых пинг для online-беготни был бы неприлично большим. Дай побольше время, все будет. Но кое-что есть и сейчас:



Если это не клон дьяблы, считайте меня адинэснегом. :)

Графика уровня AC в браузерах под виндой невозможна до тех пор, пока она рисуется через убогий GDI. Однако metro работает через directx, и когда вин-браузеры переедут под метро, и эта планка будет взята, даже html 6 не потребуется.
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38535002
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вообщем JS рулит и разруливает ))
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38535020
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин СергейГотов освоить бюджет в 200 000 000 $ на разработку игры которую невозможно защитить от пиратов (без шуток)
с таким же уровнем графики

А какую возможно? )) Вообще, по безопасности js не уступает другим языкам. Если речь о том, что он open-source, то можно написать без проблем свой байт-код интерпретатор (уж в 200 000 000 Вы вложитесь ). Хотя думаю уже должны быть готовые решения по данному вопросу :) Вы не первый, кто хочет уберечь свой код от посторонних глаз :)
...
Рейтинг: 0 / 0
Одному мне не хватает этого в js?
    #38535166
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Judo Ну вообщем JS рулит и разруливает ))А обещал оценку качества графики...

ПрограмёрВы не первый, кто хочет уберечь свой код от посторонних глаз :)Так он вроде как раз и не хочет: Малыхин Сергей которую невозможно защитить от пиратовТипа это фича :)
...
Рейтинг: 0 / 0
81 сообщений из 81, показаны все 4 страниц
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Одному мне не хватает этого в js?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]