Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вернуть больше одной переменной (значения) 
:(
    Опции темы
DissDoc
Дата 5.3.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 463
Регистрация: 13.7.2006

Репутация: нет
Всего: нет



Т.е. встал вопрос, как мне вернуть из функции больше одного значения? 
в PHP например делают так
Код

function test(&$a, &$b)
{
    $a = 2;
    $b = 3;
}

А как это в джаве реализовать?
PM MAIL WWW   Вверх
batigoal
Дата 5.3.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Код

class A
{
  public field1;
  public field2;
}

......

void processA(A a)
{
  a.field1 = ...;
  a.field2 = ...;
}


Либо разделить функцию на две. Либо сделать так (лучший, на мой взгляд, вариант):
Код

class A
{
  private field1;
  private field2;

  public void setFields(field1, field2)
  {
    this.field1 = field1;
    this.field2 = field2;
  }
}

......

a.setFields(..., ...);

Тогда можно будет точно сказать, что изменить объект может только он сам. А не какой-нибудь посторонний вызов.

Это сообщение отредактировал(а) batigoal - 5.3.2007, 14:48


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
DissDoc
Дата 5.3.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 463
Регистрация: 13.7.2006

Репутация: нет
Всего: нет



Ясно, т.е. нельзя =) Просто было б очень удобно не заводить глобальных переменных ) А то я закопаюсь =)
PM MAIL WWW   Вверх
batigoal
Дата 5.3.2007, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Да вроде я и не вижу у себя глобальных переменных smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
y3u
Дата 5.3.2007, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 5
Всего: 13



ИМХО, надо вообще избегать таких конструкций, как процесс, почитайте биттер джаву... хороший стиль - это не менять значения инстанса методами, надо соблюдать инкапсуляцию, т.к. это наиболее безопасно и заставляет писать более чистый код. Взяли инстанс, что то сделали с его копией, проверили ее на валидность, заменили копией рабочий инстанс... как-то так...
 
Код

class A {
    private ... f1;
    private ... f2;

    public ... getF1() {
        return f1;
    }

    public ... getF2() {
        return f2;
    }

    public void setF1(... newF1Value) {
        f1 = newF1Value;
    }

    public void setF1(... newF2Value) {
        f1 = newF2Value;
    }
}

class B {
    ....
    private A doSomethingWithA(A inputA) {
        A editableA = inputA.clone();
        editableA.setF1(...);
        editableA.setF2(...);
        return editableA;
    }
}




--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
DissDoc
Дата 5.3.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 463
Регистрация: 13.7.2006

Репутация: нет
Всего: нет



Ага, приблизительно понял. Нуно почитать. Спасибо за совет.
PM MAIL WWW   Вверх
alexsmirnov
Дата 9.3.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 23.8.2005

Репутация: нет
Всего: 7



Классы всегда передаются по ссылке - поэтому можно считьать любой параметр результатом :
Код

public class Context {
      private ... field1;
      private ....field2;
     ............
     public void setField1(...)
     public .... get Field1()....

}

....................
   public void myMethod(Context c){
   c.setField1(...);
   c.setField2(...);
   return;
   }

PM MAIL   Вверх
chief39
Дата 12.3.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Цитата(DissDoc @  5.3.2007,  14:28 Найти цитируемый пост)
Т.е. встал вопрос, как мне вернуть из функции больше одного значения? 

Если вопрос стоит именно так - тогда создай свой маленький классец для передачи набора значений.
В котором будут private переменные и геттеры/сеттеры.
Типа transfer object. Объект создаётся и заполняется "чистый" перед возвратом.

Тогда будешь передавать по значению и избежишь той лажи, о которой y3u сказал. То есть "побочного эффекта метода".

Так логичнее, красивее и понятнее для потомков. Правда - придётся создавать новый класс.


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0949 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.