LINUX.ORG.RU

java после C++

 , , ,


0

3

Любил си, нравится его философия. Знаю с++ на среднем уровне, более менее понимаю концепцию ООП. Но уже давно пишу под андроид на джава, и понимаю что я все дальше отдаляюсь от Си/C++ и перехожу к джаве. А я ведь даже ни одной книги о джаве не читал, пишу в неком сишном(или с++) стиле.

Так вот, какую книгу прочитать чтоб лучше программировать на джаве? Но у меня не только проблемы с недостатком знаний, мне ещё философия джавы не нравится(или не понятна). Вот например разные сеттеры геттеры, вроде философия этого ясна, проще дебажить(так говорится, почему так не понимаю). Все приходящие данные можно контролировать в сеттере, если изменилась какая-то логика то можно поменять что-то в геттере, а не везде в коде где получается это значение. Но как-то это «некрасиво» чтоль, настолько привычнее писать obj.something = something; чем obj.setSomething(something);

А этот дурацкий доступ к ArrayList через get? Ну куда это годится, выглядит отвратительно.

Богомерзкий 
balls.get(j).body.getPosition()
вместо православного 
balls[j].body.position 

Крче, просвятите меня, как жить и куда дальше двигаться. П.С. напоминаю что джавой я пользуюсь исключительно для android разработки(вообще говоря сейчас я пишу на libGDX оно и под десктопе запускается, в таком случае java я пользуюсь для геймдева).

★★★

Сделать something пабликом и использовать ArrayList.toArray().

orm-i-auga ★★★★★
()
Ответ на: комментарий от anonymous

пиши на C# и не выйо, java нужна не дла этого, увы.

Поддерживаю, то, что так тебя расстраивает, там пофикшено (Ъ-property и индексаторы)

Uter
()
Ответ на: комментарий от abs

Плюс можно схитрить:

Xamarin Studio под гнилой лицензией, но приложения на базе Monodroid и Monotouch (от основного xamarin но без лицензий).

Отдельный вопрос - ограничения бесплатного Xamarin (возможно не запрещено пользовать его как угодно), Но уж что-то, а мучать себя java ради андроида не стоит. Если б еще это была истинная java с j2ee и jpa, а как для android - так лучше попользовать что то удобнее. Ну и еще есть Qt. UI на нем пилить не выйдет без java, а вот opengl в себе - вполне.

ИМХО.

anonymous
()

настолько привычнее писать obj.something = something; чем obj.setSomething(something);

Лол. Ты не знаешь C++. И в ООП не умеешь. И кто таких программировать пускает...

Крче, просвятите меня, как жить и куда дальше двигаться.

Двигайся улицы подметать

unt1tled ★★★★
()

А этот дурацкий доступ к ArrayList через get? Ну куда это годится, выглядит отвратительно.

Да, других проблем в яве нет, поэтому остается негодовать по поводу лишних букв.

Deleted
()

balls.get(j)

Я уже не помню, когда я последний раз так писал. Все через for-each делается.

джавой я пользуюсь исключительно для android разработки

Попробуй скалу, она нормально на андроиде заводится.

backburner
()

Заходи в Скалу. Я, правда, не знаю, есть ли она под ведроид.

Тут ты можешь перерефакторить

class Foo {
  val a: Int
}
в
class Foo {
  def a: Int = {
     //здесь любые проверки и вычисления
  }
  def a_=(value: Int) = {
    //а здесь — то, что делает твой сеттер
  }
}
не меняя ничего в остальном коде, т.е.,
foo.a = 1
println(foo.a)
как работало, так и будет работать, только уже через геттеры-сеттеры.

И доступ к массиву делается тривиально:

val a = Array(10,9,8)
println(a(1)) //печатает 9

Miguel ★★★★★
()
Последнее исправление: Miguel (всего исправлений: 1)
Ответ на: комментарий от backburner

Тут через foreach не сделать, нужно искать расстояние между объектами

for(int i = 0; i < balls.size; i++){
                    for(int j = 0; j < balls.size; j++){
                        if(i != j && balls.get(i).color == balls.get(j).color){
                            Vector2 jv = balls.get(j).body.getPosition();
                            Vector2 iv = balls.get(i).body.getPosition();
                            if(jv.dst2(iv)*0.88f < Math.pow(BALL_SIZE*0.1f,2)){ // 0.88 This means that between the balls may be a little big distance
                                graphBall.addEdge(i, j);
                            }
                        }
                    }
                }

abs ★★★
() автор топика
Ответ на: комментарий от Deleted

Ъ перегрузка операторов, отстрел обоих ног одной пулей со смещенным центром.

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

anonymous
()
Ответ на: комментарий от BruteForce

Тем более хорошо.

Мопед-то не мой, просто слыхал жалобы что были какие то траблы с недостающими фичами. Тогда тем боле неясно зачем себя силовать б-го мерзкой джавой

anonymous
()
Ответ на: комментарий от Miguel

Вполне себе foreach.

Где тут вполне себе foreach если мне нужно добавлять найденный индексы(i,j) потом в граф

abs ★★★
() автор топика
Ответ на: комментарий от Miguel

Делать нодами графа не индексы, а сами мячи.

Затруднительно потом будет работать. Сейчас у меня там простой

public void addEdge(int a, int b){
        nodes.get(a).link.add(b);
        nodes.get(b).link.add(a);
}
а как в случае мяча,а не его индекса это все реализовать? Да и стоит ли вообще это делать ради какого-то foreach

Сделать индекс полем мяча.

Это можно, но опять же, а так ли большая выгода будет?

abs ★★★
() автор топика
Ответ на: комментарий от BruteForce

Раз уж такая нить пошла, насколько жирнее получается приложение за счет Qt runtime по сравнению например с всякими html5-embedded-browser'ами, которые ~ 10MB к приложению докидывают?

anonymous
()
Ответ на: комментарий от abs

Например, так:

public void addEdge(Ball a, Ball b){
        a.link.add(b);
        b.link.add(a);
}
Или так:
public void addEdge(Ball a, Ball b) {
    nodesMap.get(a).link.add(b)
    nodesMap.get(b).link.add(a)
}

Miguel ★★★★★
()
Ответ на: комментарий от anonymous

про хеширование не забудь рассказать

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

Но это все оффтоп, речь совсем о другом

abs ★★★
() автор топика
Ответ на: комментарий от Deleted

Почему каждый раз когда какойто чудак ноет про геттеры, оказывается что его код говно?

Почему на лоре только обсырают вместо того чтоб обоснованно сказать в чем проблема или что узнать/прочитать чтоб в будущем все было лучше?

П.С. напоминаю что как я сказал выше я не прочитал по джаве не одной книжки, и пишу на ней так как делал бы это на с++.

abs ★★★
() автор топика
Ответ на: комментарий от abs

и пишу на ней так как делал бы это на с++.

дык в том и проблема что и на сях так писать не стоит, код ужасен безотносительно языка.

1. у тебя доступ по индексу для одного и тогоже элемента осуществляется по 2 раза

2. в цикле выполняется возведение в степень константы 'Math.pow(BALL_SIZE*0.1f,2)'

не говоря о названиях всего и вся с двойкой в конце

Deleted
()
Ответ на: комментарий от Deleted

у тебя доступ по индексу для одного и тогоже элемента осуществляется по 2 раза

А разве это проблема? Массив же, доступ должен быть мгновенный.

2. в цикле выполняется возведение в степень константы 'Math.pow(BALL_SIZE*0.1f,2)'

И правда, чет не заметил. Но я особо за этим местом и не следил, данный код раз 100 * 60(фпс) вызываться в секунду будет.

abs ★★★
() автор топика
Ответ на: комментарий от Miguel

люблю я вас теоретиков, люблю во все дыры 8)

Есть вечные студенты которые дрочат на сложность алгоритмов, а есть чуваки с опытом, которые _еще_ учитывают сколько раз этот алгоритм вызывается, как часто и еще 100500 нюансов.

Deleted
()
Ответ на: комментарий от abs

А разве это проблема?

ну что мне тебе сказать то, ты не туда смотришь, тут дело не в оптимизации, а в том что код из-за этого (и остальных перечисленных вещей) выглядит, пахнет и даже крякает как говно.

а былаб у тебя переменная - строка if выглядела бы не так угребищьно и ты не так страдал от боли при виде get(i) вместо

Deleted
()

Суть поста:

Все устраивает, но надо что-то написать, могу придраться только к

balls.get(j).body.getPosition()

loz ★★★★★
()
Ответ на: комментарий от Deleted

Написал вот так

for(int i = 0; i < balls.size; i++){
    Ball ballI = balls.get(i);
    for(int j = 0; j < balls.size; j++){
        Ball ballJ = balls.get(j);
        if(i != j && ballI.color == ballJ.color){
            Vector2 jv = ballI.body.getPosition();
            Vector2 iv = ballJ.body.getPosition();
            if(jv.dst2(iv)*0.88f < BALL_SIZE_DIV_TEN_SQR){
                graphBall.addEdge(i, j);
            }
        }
    }
}

abs ★★★
() автор топика
Ответ на: комментарий от abs

В либждх для этого предусмотрены свои коллекции, которые при их засовывании в foreach не генерят мусор. Правда с ними и вложенного цикла не написать. ☺

PolarFox ★★★★★
()
Ответ на: комментарий от Miguel

Заходи в Скалу. Я, правда, не знаю, есть ли она под ведроида.

Есть, но только с обфускатором впридачу. Даже компиляторы С++ позавидуют скорости сборки проекта.

dave ★★★★★
()
Ответ на: комментарий от ii8_

посмотри вот этот интересный шаблон.

писал похожий алгоритм в школе)) Не все так радужно в нем как кажется, при моем количестве шариков(максимум 60) в нем вообще нет смысла, он может даже медленнее работать.

abs ★★★
() автор топика
Ответ на: комментарий от PolarFox

В либждх для этого предусмотрены свои коллекции, которые при их засовывании в foreach не генерят мусор. Правда с ними и вложенного цикла не написать. ☺

Я их коллекциями и пользуюсь (Array в данном случае). А в чем проблема с ними вложенный цикл написать?

abs ★★★
() автор топика

Знаю с++ на среднем уровне

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

Solace ★★
()
Ответ на: комментарий от aedeph_

Теорию функций комплексного переменного лучше учи, студент.

Не интересно. Мне вообще говорили что «да все отлично будет, 75% после 4 курса идут программистами работать». Зря я в ВУЗ поступил, ничего хорошего тут нет.

abs ★★★
() автор топика
Ответ на: комментарий от abs

У них iterator() возвращает один и тот же экземпляр итератора, поэтому вложенный foreach с одной коллекцией не написать. Только обычный for с индексами.

PolarFox ★★★★★
()
Ответ на: комментарий от aedeph_

Пришло время писать ПСЖ, не?

Люблю девушку из киев. На втором курсе возможно найду роботу в киеве. Родители очень хотят чтоб я учился.

abs ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.