powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Небольшой кусок кода JavaScript to Delphi
12 сообщений из 12, страница 1 из 1
Небольшой кусок кода JavaScript to Delphi
    #39614512
applauser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друзья, пожалуйста, помогите перевести несколько строк с JS на Delphi. С JS совсем не знаком, да и по Delphi хромаю, учусь.
Заранее спасибо откликнувшимся!
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
this.couple = function(d) {
    for (var a = [], b = [], e = function(a, b, c) {
            for (; a.length < c;) a = b + "" + a;
            return a
        }, c = 0; 2 > c; c++) a.push(Math.floor(65537 * Math.random()) + 0), b.push(e(parseInt(a[c]).toString(16), "0", 4));
    a.splice(1, 0, d);
    b.splice(1, 0, a.join(""));
    return b.join("")
};
...
Рейтинг: 0 / 0
Небольшой кусок кода JavaScript to Delphi
    #39614585
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кошмар какой... можно выдавить сишника из хаоса, но хаос из сишника - никогда. Даже если он перековался в жс-иста.
Для начала надо перегнать сие месиво в человеческий вид
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
this.couple = function(d) {
    var a = [], b = [];
    var e = function(a, b, c) {
            while (a.length < c)
                 a = b + "" + a;
            return a
        }
    var c = 0;
    for (; 2 > c; c++) {
        a.push(Math.floor(65537 * Math.random()) + 0);
        b.push(e(parseInt(a[c]).toString(16), "0", 4));
    }
    a.splice(1, 0, d);
    b.splice(1, 0, a.join(""));
    return b.join("")
};



Теперь функцию восстанавливаем из говнокода
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
this.couple = function(d) {
    var a = [], b = [];
    var padLeft = function(src, padChar, len) {
            while (src.length < len)
                 src = padChar + "" + src;
            return src
        }
    var c = 0;
    for (; 2 > c; c++) {
        a.push(Math.floor(65537 * Math.random()) + 0);
        b.push(padLeft(parseInt(a[c]).toString(16), "0", 4));
    }
    a.splice(1, 0, d);
    b.splice(1, 0, a.join(""));
    return b.join("")
};
...
Рейтинг: 0 / 0
Небольшой кусок кода JavaScript to Delphi
    #39614597
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переделываем идиотский цикл for (; 2 > c; c++)

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    function padLeft(src, padChar, len) {
            while (src.length < len)
                 src = padChar + "" + src;
            return src
        }

this.couple = function(d) {
    var a = [], b = [];
    var item;
    item = Math.floor(65537 * Math.random()) + 0;
    a.push(item);
    b.push(padLeft(item.toString(16), "0", 4));

    item = Math.floor(65537 * Math.random()) + 0;
    a.push(item);
    b.push(padLeft(item.toString(16), "0", 4));

    a.splice(1, 0, d);
    b.splice(1, 0, a.join(""));
    return b.join("")
};



Теперь видно, что splice тут как корове седло

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    function padLeft(src, padChar, len) {
            while (src.length < len)
                 src = padChar + "" + src;
            return src
        }

this.couple = function(d) {
    var a = [], b = [];
    var item;

    item = Math.floor(65537 * Math.random()) + 0;
    a.push(item);
    a.push(d);
    item = Math.floor(65537 * Math.random()) + 0;
    a.push(item);

    b.push(padLeft(parseInt(a[0]).toString(16), "0", 4));
    b.push(a.join(""));
    b.push(padLeft(parseInt(a[2]).toString(16), "0", 4));

    return b.join("")
};



Ну и финальный аккорд

Код: 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.
    function padLeft(src, padChar, len) {
            while (src.length < len)
                 src = padChar + "" + src;
            return src
    }

    function fixedLenHex(src, len) {
            return padLeft(parseInt(src).toString(16), "0", len)
    }

this.couple = function(d) {
    var a = [
       Math.floor(65537 * Math.random()) + 0,
       d,
       Math.floor(65537 * Math.random()) + 0
    ];
    var b = [
       fixedLenHex(a[0], 4),
       a.join(""),
       fixedLenHex(a[2], 4)
    ];

    return b.join("")
};



Уф. Дальше сам. Говнокодокопательство жутко утомляет
...
Рейтинг: 0 / 0
Небольшой кусок кода JavaScript to Delphi
    #39614615
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2Уф. Дальше сам. Говнокодокопательство жутко утомляет
с учетом
applauserС JS совсем не знаком
недокопал
...
Рейтинг: 0 / 0
Небольшой кусок кода JavaScript to Delphi
    #39614702
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а зачем нужны "" и 0 в конструкциях ниже?

Код: java
1.
2.
src = padChar + "" + src;
item = Math.floor(65537 * Math.random()) + 0;
...
Рейтинг: 0 / 0
Небольшой кусок кода JavaScript to Delphi
    #39614707
applauser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2,

Большое спасибо за рефакторинг. Теперь более-менее становится понятным. Этот код я получил, прогнав через Closure Compile еще более непонятный и длинный говнокод с бессмысленными чередами арифметических действий. Главное, чтоб return'ы относительно совпадали (random не в счет). Вы вывели несколько функций за пределы главной функции, их можно внутрь функции засовывать? Дело в том, что я пользуюсь онлайн отладчиками JS (например тут ). Несколько вариантов попробовал, не смог запустить код.
...
Рейтинг: 0 / 0
Небольшой кусок кода JavaScript to Delphi
    #39614746
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpКстати, а зачем нужны "" и 0 в конструкциях ниже?
в первом случае, наверное, для приведения к строке
во втором, хз, на выходе Math.floor уже number
...
Рейтинг: 0 / 0
Небольшой кусок кода JavaScript to Delphi
    #39614798
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Докнедокопал
Дальше все на уровне логики и мануал по js в зубы)
alekcvpКстати, а зачем нужны "" и 0 в конструкциях ниже?

Код: java
1.
2.
src = padChar + "" + src;
item = Math.floor(65537 * Math.random()) + 0;


Издержки динамической типизации и корявости автора... Они не нужны при текущем применении ( 0 с Math.floor, "" с parseInt().toString() ). Кстати, если d - это число, то массив a можно генерить из заведомых чисел, соответственно parseInt тоже лишний.

applauserВы вывели несколько функций за пределы главной функции, их можно внутрь функции засовывать?
Можно конечно, это уже как удобнее будет.
...
Рейтинг: 0 / 0
Небольшой кусок кода JavaScript to Delphi
    #39614801
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2Издержки динамической типизации и корявости автораможет то намеренная обфускация
...
Рейтинг: 0 / 0
Небольшой кусок кода JavaScript to Delphi
    #39615025
applauser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получилось вот так, вроде все работает:
Код: pascal
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.
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Single;
  a, b, s, t: string;
begin
  i := 111211;  //главный входной параметр
  s := IntToStr(Math.Floor(65537 * Random)); // в uses Math прописать
  t := IntToStr(Math.Floor(65537 * Random));
  a := s + FloatToStr(i) + t;
  b := fixedLenHex(StrToInt(s), 4) + md5(a) + fixedLenHex(StrToInt(t), 4);  //в uses IdHashMessageDigest для md5
  Memo1.Text := b;
end;

function padLeft(src, padChar: string; len: Integer): string;
begin
  while Length(src) < len do
    src := padChar + src;
  Result := src;
end;

function fixedLenHex(src, len: Integer): string;
begin
  Result := padLeft(fromDec(src, 16), '0', len);  //в JS есть простая функция .toString(16), а тут не очень простая
end;

function FromDec(n, r: longint): string;  //перевод из 10 в 16 систему счисления
var
  s: string;
const
  digit: string[16] = '0123456789abcdef';
begin
  s := '';
  repeat
    s := digit[(n mod r) + 1] + s;
    n := n div r;
  until n = 0;
  result := AnsiLowerCase(s);
end;

function md5(s: string): string;
begin
  Result := '';
  with TIdHashMessageDigest5.Create do
    try
      Result := AnsiLowerCase(HashStringAsHex(s));
    finally
      Free;
    end;
end;

ParseInt реально лишняя. Советы по оптимизации приветствуются )
Спасибо Василию за потраченное время!
...
Рейтинг: 0 / 0
Небольшой кусок кода JavaScript to Delphi
    #39615047
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
applauserСоветы по оптимизации приветствуются )
1. Убери последнюю строку в FromDec - она бессмысленна.
2. Добавь const в параметр фции md5.
...
Рейтинг: 0 / 0
Небольшой кусок кода JavaScript to Delphi
    #39615053
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
applauser
Код: pascal
1.
2.
3.
4.
5.
6.
function padLeft(src, padChar: string; len: Integer): string;
begin
  while Length(src) < len do
    src := padChar + src;
  Result := src;
end;


Я бы так сделал:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function padLeft( const src: String; padChar: Char; len: Integer): string;
var
  nCurLen: Integer;
begin
  Result := src;
  nCurLen := Length( src );
  if nCurLen < Len then
    Result := StringOfChar( padChar, Len - nCurLen ) + Result;
end;
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Небольшой кусок кода JavaScript to Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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