07.12.2011, 22:50
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
ну да, особенно вот это для новичков чаще всего не понятно: "~~"
|
|
07.12.2011, 22:59
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Сообщение от devote
|
ну да, особенно вот это для новичков чаще всего не понятно: "~~"
|
Нас препод (не по js, нет - по C++), помнится, специально заставлял использовать побитовые операторы - чтобы в будущем хоть представляли, что это.
|
|
08.12.2011, 18:00
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от melky
|
вы для людей код пишите? вы добровольно решаете задачу, выкладываете решение на форум.. да, для людей! так почему не следуете стилю написания?
|
в данном случае такое написание мне кажется более логичным
Сообщение от melky
|
а попытки ручного преобразования в байт-код оставьте для второй версии скрипта, которая называется "минифицированной" и после всех ухищрений ещё и сжата в GCC.
|
Вы заблуждаетесь, попыток обфускации я не предпринимал. За ссылку спасибо)
melky, да, в js я новичок и скорее всего у меня еще нет чувства стиля именно в нем. Но, я пишу так, как понятно мне и как мне кажется наиболее логичным.
Тут надо внести ясность: если бы я знал, что этот код придется кому-нибудь сопровождать, то написал бы по другому (отчасти) и дополнил его комментариями
Сообщение от melky
|
PSS если выложите код в двух версиях - для разработчиков (с комментариями и со всем порядочным) и для пользователей (минифицированная), то я поставлю вам плюсик, если это важно
|
Поставите - спасибо, нет - ну значит нет) Для меня сейчас главное врубиться в синтаксис js, его особенности и нюансы; попытаться понять причуды браузеров.
Думается мне, что большинство из Вас "пришло" в js уже зная C, C++, Java или какой-нибудь другой язык со схожим синтаксисом. К сожалению, это не про меня. trikadin, и вообще, я самоучка, препод мне никогда не чего не объяснял) Самостоятельно изучал Assembler (к сожалению не очень долго), VBA, html, css, bat (немного). Так что, "багаж" у меня совсем скромный
Всех Вас я уважаю и мне очень интересно (и познавательно) наблюдать за Вашими советами/ответами и решениями. Надеюсь, что скоро смогу вступать с Вами в полноценные дискуссии по js
melky, уж не знаю, пригодится или нет, в следующих двух постах приведенные выше алгоритмы с комментариями. Надеюсь, ни чего не напутал ^_^
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 08.12.2011 в 18:04.
|
|
08.12.2011, 18:03
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
// Переводит римские числа в арабские
var num = prompt("Введите римское число", "ammmCMXCIX"); // default - 3999
if(num) alert(RomanToArabic(num));
function RomanToArabic() {
// объявляем переменные, инициализируем объект
var i, alph = { I:1, V:5, X:10, L:50, C:100, D:500, M:1000 };
// j - счетчик символов
// h - результат предыдущих вычислений
// n - возвращаемое число
// По буквам строки/римского числа
for(var h = 0, j = 0, n = 0; j < arguments[0].length; j++) {
// используем объект как ассоциативный массив - по римской цифре определяем арабскую
i = alph[arguments[0].charAt(j).toUpperCase()];
/* // строку ниже, в данном случае, можно записать так:
if(i != undefined) { // римская цифра?
if(h < i) { // предыдующая цифра < текущей, вычитаем
h = i - h * 2; // т.е. h = i - (h << 1)
}
else { // предыдующая цифра >= текущей, получаем эту цифру
h = i;
}
n += h; // собираем число
} */
if(i) n += h = (h < i ? i - (h << 1) : i);
}
// возвращаем число
return n;
}
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
08.12.2011, 18:03
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
// Переводит арабские числа в римские
var num = prompt("Введите число", 19); // default - 19
if(num) alert(ArabicToRoman(num));
function ArabicToRoman() {
// массив соответствий римских и арабских чисел
var alph = [["I",1], ["IV",4], ["V",5], ["IX",9], ["X",10], ["XL",40], ["L",50], ["XC",90], ["C",100], ["CD",400], ["D",500], ["CM",900], ["M",1000]];
// j - счетчик эл. массива
// i - число (арабское), кот. требуется перевести
// n - возвращаемое римское число
// По элементам массива -> от большего к меньшему
for(var j = alph.length - 1, i = arguments[0], n = ""; j != -1; j--) {
/* строку ниже можно записать следующим образом
if(~~(i / alph[j][1]) > 0) { // целочисленное деление и сравнение с 0
n += alph[j][0]; // собираем римское число
i -= alph[j][1]; // корректируем арабское число на то, кот. определили
j++; // проверяем пару (эл. массива) еще раз
} */
if(~~(i / alph[j][1]) > 0) { n += alph[j][0]; i -= alph[j][1]; j++; }
}
// возвращаем римское число
return n;
}
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
08.12.2011, 22:30
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от nerv_
|
melky, да, в js я новичок и скорее всего у меня еще нет чувства стиля именно в нем. Но, я пишу так, как понятно мне и как мне кажется наиболее логичным.
|
код перестанет быть таким через месяц
я сейчас изменил стиль на более подробный ... и спустя месяц (проект застыл, дела. сейчас снова будет работать) я сел смотреть код. доя меня было радостным событием: я смог с первой попытки понять, что он делает !
торжественно! хотя что за файлы и каково их содержимое, я перестал помнить по истечении недели паузы разработки.
Сообщение от nerv_
|
Думается мне, что большинство из Вас "пришло" в js уже зная C, C++, Java или какой-нибудь другой язык со схожим синтаксисом. К сожалению, это не про меня. trikadin, и вообще, я самоучка, препод мне никогда не чего не объяснял) Самостоятельно изучал Assembler (к сожалению не очень долго), VBA, html, css, bat (немного). Так что, "багаж" у меня совсем скромный
|
я изучал html+css+php на уровне гавнокода. потом сел за C#, в котором понимал многопоточность 2 дня (!!!!полностью допёрло,как это использовать. помню кстати до сих пор эти проклятые new Thread(), myth.start() и myth.reportProgress(a,b,c,d) .....)
а потом пересел на JS и читал про него днями (!)... так сильно мне понравился этот язык.
Сообщение от nerv_
|
Всех Вас я уважаю и мне очень интересно (и познавательно) наблюдать за Вашими советами/ответами и решениями. Надеюсь, что скоро смогу вступать с Вами в полноценные дискуссии по js
|
+1 собеседник. было бы неплохо! обращайся, если будут вопросы
PS начал учить JS осенью 2010
/////////////////// по делу //////////////////////////////
кстати,
~~(i / alph[j][1]) > 0
лучше бы заменить на
(i / alph[j][1])|0
тоже "приведение к числу", но быстрее.
это одно и то же , что и
parseInt(i / alph[j][1])
Последний раз редактировалось melky, 08.12.2011 в 22:40.
|
|
08.12.2011, 23:01
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Сообщение от melky
|
(i / alph[j][1])|0
|
Только | 0 нужно писать внутри скобок.
alert( [2/2 | 0 > 1, (2/2 | 0) > 1] )
Сообщение от melky
|
это одно и то же , что и
|
Не совсем.
alert([1/3 * 1e10, parseInt(1/3 * 1e10), 1/3 * 1e10 | 0].join('\n'))
|
|
08.12.2011, 23:19
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
nerv_, а я тоже, считай, сам всё изучал. Препод был по теории алгоритмов, а не по JS. Да и то недолго, ибо не школьный он был.
Кстати, по теме - js был первым языком, на котором я стал писать что-то сложнее print("Hello, world"). А нормально (то есть очень усиленно, с прочтением кучи литературы, тематических сайтов и т.д.) я его изучаю... Ну, полгода, наверное. Так что мы с вами в одном положении, можно сказать)
Сообщение от nerv_
|
Думается мне
|
Хех) Одна из моих любимых фраз)
|
|
08.12.2011, 23:35
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от B@rmaley.e><e
|
Только | 0 нужно писать внутри скобок.
alert( [2/2 | 0 > 1, (2/2 | 0) > 1] )
|
в вышестоящем примере была проверка на положительное число, поэтому можно таки опустить.
Сообщение от B@rmaley.e><e
|
Не совсем.
alert([1/3 * 1e10, parseInt(1/3 * 1e10), 1/3 * 1e10 | 0].join('\n'))
|
спасибо за пример. почему так происходит ?
|
|
09.12.2011, 01:16
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Сообщение от melky
|
в вышестоящем примере была проверка на положительное число, поэтому можно таки опустить.
|
?
alert( [-2/2 | 0 > 0, (-2/2 | 0) > 0] )
Сообщение от melky
|
спасибо за пример. почему так происходит ?
|
Согласно стандарту, у побитовых операторов есть такой шаг как вызов ToInt32. Т.е. каждый из аргументов приводится к 32-х битовому знаковому числу. В то время как обычно JS оперирует 64-битными числами двойной точности (IEEE 754). Отсюда и получается сужение множества значений.
|
|
|
|