L>Дело в том что согласно референсу JScript показался мне более гибким, навороченым в смысле готовых функций, более WEB ориентированым. И в качестве минуса — не возмоджность передать несколько возвращаемых значений без сложностей (т.е. нужно делать коллекции или массивы, что не всегда удобно)
Лехко :
function ReturnManyValues()
{
return {strFirstValue:"1", nNumValue:2, bBoolValue:true};
}
var oRes = ReturnManyValues();
window.alert(oRes.strFirstValue);
window.alert(oRes.nNumValue);
window.alert(oRes.bBoolValue);
L>А как на самом деле обстоит дело?
JScript — это самый красивый язык из всех которые я видел. Очень лаконичный и минималистичый — но одновременно мощный и красивый. VBScript просто жуткое убожество по сравнению с JScript.
Не уверен что сюда, но на мой взгляд вопрос скорее философский, чем практический.
Есть ряд задач автоматизации который в силу ряда причин следует реализовать в виде скриптов для WSH. Вопрос, чем отличается направленность этих языков???
Дело в том что согласно референсу JScript показался мне более гибким, навороченым в смысле готовых функций, более WEB ориентированым. И в качестве минуса — не возмоджность передать несколько возвращаемых значений без сложностей (т.е. нужно делать коллекции или массивы, что не всегда удобно)
В VBScript не вводились нововведения достаточно давно, т.е. и на 2000м я получу тот же функционал что и на XP. Ну и вроде бы и все.
Здравствуйте, loknalori, Вы писали:
L>Не уверен что сюда, но на мой взгляд вопрос скорее философский, чем практический. L>Есть ряд задач автоматизации который в силу ряда причин следует реализовать в виде скриптов для WSH. Вопрос, чем отличается направленность этих языков???
L>Дело в том что согласно референсу JScript показался мне более гибким, навороченым в смысле готовых функций, более WEB ориентированым. И в качестве минуса — не возмоджность передать несколько возвращаемых значений без сложностей (т.е. нужно делать коллекции или массивы, что не всегда удобно)
L>В VBScript не вводились нововведения достаточно давно, т.е. и на 2000м я получу тот же функционал что и на XP. Ну и вроде бы и все.
L>А как на самом деле обстоит дело?
Я бы (IMHO, разумеется) выбрал JScript. Все-таки он очень похож на JavaScript, который стандартизован.
Приходиться заниматься гадостью — зарабатывать на жизнь честным трудом (Б.Шоу)
Здравствуйте, _pk_sly, Вы писали:
L>> не возмоджность передать несколько возвращаемых значений без сложностей (т.е. нужно делать коллекции или массивы, что не всегда удобно)
Здравствуйте, loknalori, Вы писали:
L>этот способ не удобно реализовывать когда ты в свое приложение встраиваеш WSH
сразу поясню — для сложных типов нужно реализовывать свои COM интерфейсы, что менее тривиально как для встроенных типов.
L>>этот способ не удобно реализовывать когда ты в свое приложение встраиваеш WSH L>сразу поясню — для сложных типов нужно реализовывать свои COM интерфейсы, что менее тривиально как для встроенных типов.
встраивал.
никаких сложностей.
благо есть wizardы — что для ATL что для MFC. добавления нового объекта или свойства делается в несколько кликов либо копи-пастов.
Здравствуйте, loknalori, Вы писали:
L>А как на самом деле обстоит дело?
Имхо на JScript возможностей побольше, но у VBScript более прозрачный синтаксис в некоторых вещах. Есть такой оператор как class, методы могут быть приватными. У JScript объектно ориентированный синтаксис очень уж нестандартный, но возможности практически как в нормальных языках. Тут и конствукторы c параметрами, и исключения нормальные, и еще много всего (можно у объекта в процессе выполнения подменить, удалить и добавить метод и т.д., собственно объект это Map<VARIANT,VARIANT>, очень оригинально).
Othello wrote:
>> > Единственное, что я не видел в JScript — это аналога MidB и их братьев >> > из VB. > .>substr > там есть Mid и Mid*B*
Байтов в js нету (да и нафиг оно в скриптовом языке??). И MidB уже выкинули из следующей версии VB.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
L>>А как на самом деле обстоит дело? E>Имхо на JScript возможностей побольше, но у VBScript более прозрачный синтаксис в некоторых вещах. Есть такой оператор как class, методы могут быть приватными. E>У JScript объектно ориентированный синтаксис очень уж нестандартный, но возможности практически как в нормальных языках.
Возможности его — ПОБОЛЬШЕ чем во многих "нормальных" языках
Оччень вкусная штука — возможность создавать функции где угодно c возможностью юзать переменные из текущего контекста
В JS надо привыкнуть к таким непривычным вещам:
— "окрытости" обьектов. Т.е. к обьекту могут добавляться свойства и функции, которые суть тоже свойства, в течение всего времени жизни обьекта.
— "странным" областям видимости переменных/функций — к примеру, фигурные скобки внутри функции не влияют на видимость. Т.е.:
function foo()
{
var i = 0;
{
var j = 1;
}
i = j; // Тут всё OK! i <= 1
}
— прототипы и конструкторы обьектов. Единственная, имхо, сложная вещь в JS. Впрочем, после того как я её для себя понял я перестал ей пользоваться Просто потому что наследование — вешь неродная для JS. Тут рулят функции, а не классы
— замысловатая система передачи параметров в функцию — надо привыкнуть к тому что строки и числа — только по значению, обьекты (в т.ч.) массивы — только по ссылке.
Поначалу после С++ было сложно. Правда, здОрово помогало наличие прекрасного (по сравнению с C++) отладчика c возможностями подёргать код "на коленке". Но после привыкания к JS слезть с него уже становится проблемой
L>>этот способ не удобно реализовывать когда ты в свое приложение встраиваеш WSH L>сразу поясню — для сложных типов нужно реализовывать свои COM интерфейсы, что менее тривиально как для встроенных типов.
Ты разъясни подробнее суть проблемы. Что именно тебе нужно сделать? У тебя функция f() вызывается из C++ и ты хочешь получить много возвращаемых значений?
L>Поначалу после С++ было сложно. Правда, здОрово помогало наличие прекрасного (по сравнению с C++) отладчика c возможностями подёргать код "на коленке". Но после привыкания к JS слезть с него уже становится проблемой
Здравствуйте, Left2, Вы писали:
L>>>этот способ не удобно реализовывать когда ты в свое приложение встраиваеш WSH L>>сразу поясню — для сложных типов нужно реализовывать свои COM интерфейсы, что менее тривиально как для встроенных типов.
L>Ты разъясни подробнее суть проблемы. Что именно тебе нужно сделать? У тебя функция f() вызывается из C++ и ты хочешь получить много возвращаемых значений?
да. Суть сложности (на счет проблемы — не знаю, пока не пробовал), что значения предадутся по COM интерфейсу. Если данные укладываются в VARIANT, то все нормально, но 2 значения — это уже массив...
L>>Ты разъясни подробнее суть проблемы. Что именно тебе нужно сделать? У тебя функция f() вызывается из C++ и ты хочешь получить много возвращаемых значений?
L>да. Суть сложности (на счет проблемы — не знаю, пока не пробовал), что значения предадутся по COM интерфейсу. Если данные укладываются в VARIANT, то все нормально, но 2 значения — это уже массив...
Напиши простенькую обёрточку которая из обьекта JS (видимого в C++ как IDispatch) доставала все значения (или значения по их именам). Это решит твою проблему?
L>>Поначалу после С++ было сложно. Правда, здОрово помогало наличие прекрасного (по сравнению с C++) отладчика c возможностями подёргать код "на коленке". Но после привыкания к JS слезть с него уже становится проблемой
L>Какой такой отладчик?!
Не поверишь — Visual Studio 2002, 2003 или 2005
Запускаешь cscript.exe (wscript.exe) с ключом /d и там где тебе нужно в программе остановиться — пишешь debugger;
Здравствуйте, Left2, Вы писали:
L>>>Ты разъясни подробнее суть проблемы. Что именно тебе нужно сделать? У тебя функция f() вызывается из C++ и ты хочешь получить много возвращаемых значений?
L>>да. Суть сложности (на счет проблемы — не знаю, пока не пробовал), что значения предадутся по COM интерфейсу. Если данные укладываются в VARIANT, то все нормально, но 2 значения — это уже массив...
L>Напиши простенькую обёрточку которая из обьекта JS (видимого в C++ как IDispatch) доставала все значения (или значения по их именам). Это решит твою проблему?
Задача обратная, это не программа С++ через COM дергает ф-ю, а WSH через COM пытается получить переменные для их последующего изменения. Ну вобщем не суть, какраз это не предмет данного разговора
Здравствуйте, Left2, Вы писали:
L>>WSH через COM пытается получить переменные для их последующего изменения.
L>Вот это непонятно. L>WSH — имеется в виду wscript.exe/cscript.exe?
см IActiveScriptSite, IActiveScriptSiteWindow и прочее
L>>>WSH через COM пытается получить переменные для их последующего изменения.
L>>Вот это непонятно. L>>WSH — имеется в виду wscript.exe/cscript.exe? L>см IActiveScriptSite, IActiveScriptSiteWindow и прочее
Я знаю что это такое Я не понимаю твоих обьяснений. Судя по всему, WSH-ем ты называешь своё приложение, которое является ActiveScripting-хотером? Но я всё равно всё ещё не понимаю сути проблемы. Если обьяснишь подробно — попробую помочь, мне с ActiveScripting-ом пришлось повозиться как-то...
Здравствуйте, Left2, Вы писали:
L>Не поверишь — Visual Studio 2002, 2003 или 2005 L>Запускаешь cscript.exe (wscript.exe) с ключом /d и там где тебе нужно в программе остановиться — пишешь debugger;
L>>Не поверишь — Visual Studio 2002, 2003 или 2005 L>>Запускаешь cscript.exe (wscript.exe) с ключом /d и там где тебе нужно в программе остановиться — пишешь debugger;
L>А есть подобное волшебное слово для VBScript?
Не в курсе, надо в MSDN смотреть. Но и без этого волшебного слова ты можешь в любой момент подключиться отладчиком к любому скриптовому языку который работает из-под ActiveScripting через Debug/Attach to Process...
Здравствуйте, Left2, Вы писали:
L>Я знаю что это такое Я не понимаю твоих обьяснений. Судя по всему, WSH-ем ты называешь своё приложение, которое является ActiveScripting-хотером? Но я всё равно всё ещё не понимаю сути проблемы. Если обьяснишь подробно — попробую помочь, мне с ActiveScripting-ом пришлось повозиться как-то...
WSHем я называю виндоус скрипт хост к которому обращается мой приклад посредством скрипт энджена и скрипт сайта (немного, не праильно сформулировано, но сейчас не суть). Так вот когда этот зверьб пытается запустит
В результате скармливаю енджену функцию и выполняю ее, переменные val1, и val2 доступны из моего приклада как COM обьект
Sub Waca (ByRef val1, ByRef val2)
SomeVar = val1' тут вызывается один СОМ метод который предоставляет значение
val1 = 5 ' 'тут второй на запись
val2 = 7 ' тут третий на записьend sub
Вопрос — как реализовывать СОМ интерфейсы в этом случае для сложных типов.
Здравствуйте, Left2, Вы писали:
L>>>Не поверишь — Visual Studio 2002, 2003 или 2005 L>>>Запускаешь cscript.exe (wscript.exe) с ключом /d и там где тебе нужно в программе остановиться — пишешь debugger;
L>>А есть подобное волшебное слово для VBScript? L>Не в курсе, надо в MSDN смотреть. Но и без этого волшебного слова ты можешь в любой момент подключиться отладчиком к любому скриптовому языку который работает из-под ActiveScripting через Debug/Attach to Process...
L>Вопрос — как реализовывать СОМ интерфейсы в этом случае для сложных типов.
Не очень хорошо у тебя получилось обьяснить
Я всё ещё ничего не понимаю
Во-1 — код который тут приведён жёстко заточен под VBScript, поскольку я честно говоря не очень хорошо представляю как в JS вызвать аналог VBS-ного присваивания (или как там у него называется оператор присваивания без ключевого слова SET). Во-2 — что мешает тебе описать в IDL человеческий интерфейс с функциями и пропертями, и потом писать код хоть на VBS хоть на JS вида:
Здравствуйте, Left2, Вы писали:
L>>Вопрос — как реализовывать СОМ интерфейсы в этом случае для сложных типов.
L>Не очень хорошо у тебя получилось обьяснить L>Я всё ещё ничего не понимаю L>Во-1 — код который тут приведён жёстко заточен под VBScript
Это не так. WSH по барабану на чем написано. L>Во-2 — что мешает тебе описать
То что это криво. Т.е. тот кто пишет скрипт должен знать о наличии этих СОМ методов. А в моем случае это все происходит не явно...
Вобщем, вы, похоже не с той частью задачи сталкивались. Ладно. Не суть.
Здравствуйте, loknalori, Вы писали:
L>В VBScript не вводились нововведения достаточно давно, т.е. и на 2000м я получу тот же функционал что и на XP. Ну и вроде бы и все.
L>А как на самом деле обстоит дело?
JScript более приятный, зато VBS интегрирован с COM лучше — он понимает COM коллекции, и в нем есть свойства (для того, чтобы сделать объект со свойстваи на JS надо делать WSC а в VBS они есть в самом языке).
no4>JScript более приятный, зато VBS интегрирован с COM лучше — он понимает COM коллекции,
ЕМНИП, через обьект Enumerator JScript тоже умеет с коллекциями работать.
Здравствуйте, Left2, Вы писали:
no4>>JScript более приятный, зато VBS интегрирован с COM лучше — он понимает COM коллекции, L>ЕМНИП, через обьект Enumerator JScript тоже умеет с коллекциями работать.
Да
e = new Enumerator(obj);
for (e.moveFirst(); ! e.atEnd(); e.moveNext()) {
x = e.item();
//...statements using x
}
ну, в случае с JS это решается одним-единственным враппером:
// Функция для прохода по всем эл-там коллекции
function EnumerateAll(fnToExec) {
for (var e = new Enumerator(obj); ! e.atEnd(); e.moveNext()) {
fnToExec(e.item());
}
};
// потом в коде:
EnumerateAll(function(el) { /* Do something with el */ });
Здравствуйте, Left2, Вы писали:
L>ну, в случае с JS это решается одним-единственным враппером:
L>
L>// Функция для прохода по всем эл-там коллекции
L>function EnumerateAll(fnToExec) {
L> for (var e = new Enumerator(obj); ! e.atEnd(); e.moveNext()) {
L> fnToExec(e.item());
L> }
L>};
L>// потом в коде:
L>EnumerateAll(function(el) { /* Do something with el */ });
L>
А obj внутри врапера ни при делах?
По видимому его надо тоже сделать параметром функции EnumerateAll?
Здравствуйте, Left2, Вы писали:
L>ну, в случае с JS это решается одним-единственным враппером:
L>
L>// Функция для прохода по всем эл-там коллекции
L>function EnumerateAll(fnToExec) {
L> for (var e = new Enumerator(obj); ! e.atEnd(); e.moveNext()) {
L> fnToExec(e.item());
L> }
L>};
L>// потом в коде:
L>EnumerateAll(function(el) { /* Do something with el */ });
L>
А вот так не получается
Object.prototype.each = function (action){
for (var e = new Enumerator(obj); ! e.atEnd(); e.moveNext()) {
action(e.item());
}
}
Если Вы поклонник C,C#,C++ или Java — то Вам лучше пользоваться JavaScript.
Если Basic,VB(A),VB.NET — то VBS
То, что лично меня убивает в VBS:
1) begin/end вместо {}
2) еси ф-я возвращает значение — то пишется со скобками. Иначе — без.
пример:
a = MyProc()
но
MsgBox 'a'
3) отсутствие ;
4) в AND выполняются оба условия, даже если первое ложно. IF (FALSE AND (0/0)) выдаст ошибку деления на ноль.
Но есть в VBS и приятные фичи: например там есть Input, аналога которого нет в JS
В целом же языки позволяют делать одно и тоже.
Выбор между JS/VBS для WSH напоминает выбор межлду C#/VB.NET — дело вкуса.