Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
24.01.2025, 19:57:40
Начало Помощь Поиск Войти Регистрация
Новости: ООО «Скрин маркет системз», правообладатель программы «Система брокерского обслуживания «TRANSAQ» официально заявляет, что не ведет никакой деятельности в мессенджерах или социальных сетях. 
Подробности на нашем сайте  WWW.TRANSAQ.RU.

Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: О эффективности кода « предыдущая тема следующая тема »
Страниц: [1] Печать
Автор Тема: О эффективности кода  (Прочитано 2906 раз)
bugem
Full Member
***
Сообщений: 105



Просмотр профиля Email
« : 17.04.2013, 21:55:16 »

Уважаемые разработчики!

Задумался, а какой вариант кода будет более эффективным, с точки зрения производительности?

Вариант 1.
Code: [Select]
    static myHash = 0;
// -------------------
function init
{
    myHash = new_object("hash");
    ....
}
// -------------------
function MyFunction
{
    myHash[key1] = 1;
    myHash[key2] = 2;
    ....
}

Вариант 2.
Code: [Select]
    ....
// -------------------
function MyFunction
{
   var myHash = new_object("hash");

    myHash[key1] = 1;
    myHash[key2] = 2;
    ....
}

Тоже касается и других объектов - массивов, статлайеов, файлов и т.д.

И в догонку к хешам, можно ли в поле value1 хеша1 вкложить другой хеш2 (массив), т.е. многомерные таблицы?
(Извините, не программист :) )
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #1 : 18.04.2013, 09:24:11 »

Да вроде разницы никакой особой нет, если MyFunction вызывается однократно. Если многократно - то глобальный хеш в общем-то предпочтительней, поскольку команда new_object требует времени на исполнение.

Вкладывать одни хеши в другие можно, но нет гарантии, что тут не возникнет никаких проблем с синтаксисом. Например, на данный момент ATF не позволяет делать таких присваиваний:

Code: [Select]
array[i][j] = x;

Хотя
Code: [Select]
x = array[i][j];
вполне возможно.

То есть строгого запрета на многомерные массивы нет, но есть определенные неудобства, которые, надеюсь, мы в скором времени разрешим.

Тут может оказаться полезным понимание, что на самом деле есть единый глобальный пул объектов ATF, а в переменных хранятся не сами объекты, а их идентификаторы. Таким образом, вы всё же можете работать с многомерными массивами очень неудобно:
Code: [Select]
x = array[i];
x[j] = 123;
signal::outputMultiple(array[i][j]);
выведет 123.

Это весьма криво, но вы можете написать что-нибудь вроде такой высокоуровневой функции, для упрощения работы:
Code: [Select]
function set(array, i, j, x)
{
  var y = array[i];
  y[j] = x;
}
и использовать её повсюду, как вариант. Но вообще в планах во-первых разрешение этой синтаксической проблемы, во-вторых введение новых высокоуровневых объектов типа матриц и векторов.
Записан
Страниц: [1] Печать 
Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: О эффективности кода « предыдущая тема следующая тема »
Перейти в:  


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!