1

Тема: Роздача безкоштовних Delphi Starter

Щоб отримати безкоштовну Delphi Starter треба перейти за цим посиланням та зареєструватися (якщо у вас іще нема акаунта): https://www.embarcadero.com/ru/products … l-download Але поспішайте, акція триває до 9 вересня.

Подякували: ADR1

2 Востаннє редагувалося raxp (23.08.2016 20:58:13)

Re: Роздача безкоштовних Delphi Starter

Зазвичай, після всіх цих реєстрацій вони дають пряме посилання для завантаження ISO або instaler-a.

http://altd.embarcadero.com/download/ra … _1_esd.exe

Подякували: leofun01, Chemist-i2

3

Re: Роздача безкоштовних Delphi Starter

А Я ж казав (можете пошукати у моїх повідомленнях), що Делфі рано чи пізно стане безкоштовним або помре, бо ніяк не вистояти проти такої навали чудових безкоштовних рішень. Це початок кінця.

Подякували: DOP, leofun012

4

Re: Роздача безкоштовних Delphi Starter

Cередовище (IDE) вiд борланд та ембаркадер все ховають та ховають, та все нiяк, живе курилка та прикурити даэ )
А от вiзьмiть CodeThypon, та рiзницi не вiдчуэте )))

Подякували: leofun01, shabaranskij2

5

Re: Роздача безкоштовних Delphi Starter

raxp
Разом з посиланням на завантаження, вони висилають серійник для активації Delphi. Тому реєстрація усе ж необхідна.
Що до CodeThypon, то різниця відчутна дуже сильно. Особливо коли починаєш дебажити код. Лазарівський GDB - це просто кара небесна.

Master_Sergius
Кінець - це початок початку. Я минулого місяця уже закинув п'ятдесят баксів на foundation.freepascal.org. Сподіваюсь вони наймуть якогось хорошого девелопера, щоб нарешті викинув той нещасний GDB і зробив щось нормальне.

Подякували: leofun011

6

Re: Роздача безкоштовних Delphi Starter

Як на мене, це трохи попахує некрофілією. До речі, у паскалі так і залишилося оголошення змінних лише перед begin будь-якої функції/процедури і головної програми? Це бісило ще від початку.
Ну і по популярності делфі/паскаль таки пасе задніх, взяти хоча би теги на Stackoverflow, на перших 2 сторінках точно нема ні того, ні другого.

7

Re: Роздача безкоштовних Delphi Starter

Master_Sergius написав:

Як на мене, це трохи попахує некрофілією.

Останній реліз Delphi був у лютому цього року. Підтримку Win10 зробили іще до виходу десятки.

Master_Sergius написав:

До речі, у паскалі так і залишилося оголошення змінних лише перед begin будь-якої функції/процедури і головної програми? Це бісило ще від початку.

А мені це подобається. Я б дозволив оголошувати нові змінні лише в середині циклу for і конструкцію with переробив би через оголошення нової змінної. Хоча в деяких діалектах паскаля можна оголошувати де завгодно.

Master_Sergius написав:

Ну і по популярності делфі/паскаль таки пасе задніх, взяти хоча би теги на Stackoverflow, на перших 2 сторінках точно нема ні того, ні другого.

У паскалістів Стек не дуже популярний.

Подякували: Chemist-i, raxp, leofun013

8

Re: Роздача безкоштовних Delphi Starter

var для одної описової конструкції, розміщуваний між begin та end (як це дозволили робити в пізніх діалектах) — з моєї точки зору, не по-паскалівськи. Хоча, якби описові секції дозволялось робити перед begin усередині блоку, а область видимості оголошених таким чином змінних поширювалась лише на цей внутрішній begin...end, було б цілком логічно.

9

Re: Роздача безкоштовних Delphi Starter

P.Y.
Для таких речей є вкладені функції (до речі дуже крута фішка паскаля). Оформляєте свій код у функцію і вставляєте після var батьківської. І код переробляти не треба, і читати легше.

10

Re: Роздача безкоштовних Delphi Starter

Про вкладені функції, здається, всі знають. Але вкладені блоки з власними змінними дають такі переваги, як економію імен, розміщення всіх дій в одному місці (не треба бігти на початок функції/програми, щоб подивитись, що робить вкладений блок), можливість безпосереднього виходу з кількох рівнів вкладеності (функції таке можуть лише через ексепшени).

Подякували: leofun011

11

Re: Роздача безкоштовних Delphi Starter

P.Y. написав:

розміщення всіх дій в одному місці (не треба бігти на початок функції/програми, щоб подивитись, що робить вкладений блок)

Я вважаю, що це навпаки шкідливо. Окрема вкладена функція, якщо дати їй нормальну назву, сприймається краще. У довгій функції встигнеш забути, що було на початку, поки до кінця долізеш. І для рефакторинга маленькі вкладені функції набагато зручніші.
Решти не зрозумів.

12 Востаннє редагувалося P.Y. (27.08.2016 01:09:42)

Re: Роздача безкоштовних Delphi Starter

Окрема вкладена функція, якщо дати їй нормальну назву, сприймається краще.

Якщо. Часто сконструювати осмислене однозначно зрозуміле унікальне ім'я складніше, ніж написати код, який під цим ім'ям виконується. Короткі імена недостатньо інформативні, довгі можуть нести більше інформації, але не забуваймо, що це ім'я використовується в двох місцях — якщо в голову прийшла ідея назвати одноразову функцію якось більш осмислено, треба бути обережним, щоб не відредагувати щось не те. Якщо ж одне й те ж ім'я використовується в різних областях видимості, дуже легко зробити помилку й викликати не ту функцію.

Щоб зробити код читабельнішим, для разової дії краще написати коментар, який виконує суто інформативну роль і не може викликати подібних конфліктів.

Решти не зрозумів.

Економія імен: чим менше іменованих об'єктів у коді, тим менша ймовірність конфлікту імен (напр., якщо ми підключимо модуль, що містить функцію з таким же ім'ям, то ім'я власної функції в програмі доведеться змінювати — уникаючи зайвих імен, ми уникнемо й необхідності робити подібні виправлення) і важче сплутати одне ім'я з іншим.

Вихід із кількох рівнів вкладеності: маю на увазі щось назразок такого:

function f:char;
begin
    ...
    var i: integer;
    begin
        ...
        var c:char;
        begin
            ...
            result=c;
            exit;
        end;
        ...
    end;
    ...
end;

У випадку, якщо кожен вкладений блок зі змінними реалізувати як окрему вкладену функцію, ми не зможемо використати exit у вкладеній функції для виходу з зовнішньої функції.

Подякували: leofun011

13

Re: Роздача безкоштовних Delphi Starter

Економити на іменах - це те саме, що економити на сірниках. Користь лише теоретична, а от незручностей повно. Спробуйте переглянути код якоїсь написаної не вами бібліотеки. Якщо там немає хорошої розбивки на підпрограми та об'єкти - то розібратися в такому коді дуже складно. Ну а що до можливого перетину імен, то треба просто нормально робити таку ж розбивку і у себе, і не виставляти на зовні сутності, які нікому не потрібні. До речі, вкладені функції ззовні не видно. Тому до описаної вами проблеми вони не мають жодного відношення.
Що стосується спаму Exit-ами, то велика їх кількість у підпрограмі свідчить про те, що її треба розбити на кілька менших. Тоді, можливо, логіку її роботи зможе зрозуміти іще хтось окрім автора.

14 Востаннє редагувалося P.Y. (29.08.2016 12:23:29)

Re: Роздача безкоштовних Delphi Starter

Це якщо розбивка на підпрограми справді хороша. В іншому випадку, ми отримаємо те, що прийнято називати макаронним кодом, який важко читати через рознесеність по програмі й низьку інформативнісь імен. Крім того, не забуваймо, це паскаль, де спершу йде заголовок функції, потім — вкладені в неї функції, і тільки після того — тіло головної функції (відмічене лише begin'ом, який не є унікальним ім'ям взагалі), тоді як для розуміння загальної схеми роботи програми доцільніше спершу читати тіло головної функції, і лише потім функції, які вона викликає  — якщо вкладених підпрограм забагато, це дещо утруднює навігацію в коді.

15

Re: Роздача безкоштовних Delphi Starter

Що стосується спаму Exit-ами, то велика їх кількість у підпрограмі свідчить про те, що її треба розбити на кілька менших.

Йдеться не про кількість екзітів, а глибину вкладеності — екзіт може бути один, але глибоко у вкладеному циклі, наприклад.

16

Re: Роздача безкоштовних Delphi Starter

P.Y. написав:

Це якщо розбивка на підпрограми справді хороша. В іншому випадку, ми отримаємо те, що прийнято називати макаронним кодом, який важко читати через рознесеність по програмі й низьку інформативнісь імен.

Кілометрові підпрограми з коментарями іще гірші. Якщо виникла така ситуація, як ви описали, то треба рефакторити в сторону класів.

P.Y. написав:

Крім того, не забуваймо, це паскаль, де спершу йде заголовок функції, потім — вкладені в неї функції, і тільки після того — тіло головної функції (відмічене лише begin'ом, який не є унікальним ім'ям взагалі), тоді як для розуміння загальної схеми роботи програми доцільніше спершу читати тіло головної функції, і лише потім функції, які вона викликає  — якщо вкладених підпрограм забагато, це дещо утруднює навігацію в коді.

Якщо вкладених підпрограм забагато - то це також привід зайнятися рефакторингом. А навігація - це взагалі справа IDE.

P.Y. написав:

Йдеться не про кількість екзітів, а глибину вкладеності — екзіт може бути один, але глибоко у вкладеному циклі, наприклад.

Якщо велика глибина, то тим більше треба розбивати. Причому винесенням одних лише підпрограм такому коду уже не допоможеш, треба виносити в окремі класи.

17

Re: Роздача безкоштовних Delphi Starter

Не зрозумів. Яким чином класи можуть замінити собою вихід з високих рівнів вкладеності?

18

Re: Роздача безкоштовних Delphi Starter

Якщо у вас код з великою кількістю рівнів вкладеності, то з нього стовідсотково можна виділити сутності для нових класів.

19 Востаннє редагувалося P.Y. (29.08.2016 20:18:03)

Re: Роздача безкоштовних Delphi Starter

Ну, сутності нових класів технічно можна ліпити для кожного біта. Але навіщо?

Уявімо для прикладу, в нас є 4-вимірний масив, у якому ми шукаємо елемент із заданим значенням і повертаємо його координати. Я зробив би це чотирма вкладеними циклами for з виходом із внутрішнього циклу. Не дуже уявляю, як це найлогічніше рішення можна замінити засобами ООП.

20 Востаннє редагувалося leofun01 (29.08.2016 23:13:18)

Re: Роздача безкоштовних Delphi Starter

P.Y. написав:

Уявімо для прикладу, в нас є 4-вимірний масив, у якому ми шукаємо елемент із заданим значенням і повертаємо його координати. Я зробив би це чотирма вкладеними циклами for з виходом із внутрішнього циклу. Не дуже уявляю, як це найлогічніше рішення можна замінити засобами ООП.

В мене іноді траплялись випадки, коли кількість вкладених циклів була не відома. В таких випадках завжди замінював вкладені цикли одним циклом і стеком. Якщо є потреба розпаралелювати потоки, то замість простого стеку можна використовувати комбінацію стеку і масиву (типу: масив стеків, стек масивів).

У випадку з 4-вимірним масивом можна обійтись без стеку, одним додатковим 1-вимірним масивом фіксованого розміру (4) і сунутись по ньому туди-сюди.