Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 444 445 [446] 447 448 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#6676
,
|
|
|
|
Это проблемы языков с деструктивным присваиваем. А их "высота" здесь совершенно ни при чём. |
|
Сообщ.
#6677
,
|
|
|
|
В АгдЕ =) ![]() ![]() data Vec (A : Set) : Nat -> Set where [] : Vec A zero _::_ : {n : Nat} -> Vec A n -> A -> Vec A (succ n) Добавлено Цитата MyNameIsIgor @ Это проблемы языков с деструктивным присваиваем. А их "высота" здесь совершенно ни при чём. Деструктивное присваивание можно и под капот спрятать. |
|
Сообщ.
#6678
,
|
|
|
|
Цитата korvin @ Деструктивное присваивание можно и под капот спрятать. Под какой капот? ![]() Я говорю не о том, во что компиль оптимизирует функциональщину, а о явной, используемой программистом семантике. |
|
Сообщ.
#6679
,
|
|
|
|
Специально -- могу, случайно -- нет. |
|
Сообщ.
#6680
,
|
|
|
|
Цитата korvin @ Специально -- могу, случайно -- нет. Ты мне сейчас напоминаешь Килю, который всегда-всегда проверяет входные данные, никогда не ошибается и потому его вполне радуют похапэшные функции, не бросающие исключения, а возвращающие какую-то хрень. |
|
Сообщ.
#6681
,
|
|
|
|
Цитата MyNameIsIgor @ Под какой капот? ![]() Я говорю не о том, во что компиль оптимизирует функциональщину, а о явной, используемой программистом семантике. Ну вот я и говорю про низкоуровневые язычки, с низкоуровневой императивной семантикой. =) Добавлено Цитата MyNameIsIgor @ Ты мне сейчас напоминаешь Килю, который всегда-всегда проверяет входные данные, никогда не ошибается и потому его вполне радуют похапэшные функции, не бросающие исключения, а возвращающие какую-то хрень. При чем тут проверка входных данных? Если у объекта мне нужно получить размер списка, я и вызову метод size(), а как там его внутри автор реализовал -- меня мало заботит. Если заботит, я беру другой класс реализации списка. |
|
Сообщ.
#6682
,
|
|
|
|
Цитата korvin @ Если у объекта мне нужно получить размер списка, я и вызову метод size(), а как там его внутри автор реализовал -- меня мало заботит. Тебе в стихах и песнях рассказали, что const - это не про реализацию, а про контракт. Меня тоже не заботит как он реализован. Мне важно, что вызов size() не изменяет состояние объекта. Добавлено Цитата korvin @ Ну вот я и говорю про низкоуровневые язычки, с низкоуровневой императивной семантикой. =) Ох, какое трололо |
|
Сообщ.
#6683
,
|
|
|
|
![]() ![]() class Main { static int x; public static void main (String[] args) throws java.lang.Exception { System.out.println(x); x += 100; System.out.println(x); } } Это приводит именно к изменению значения x, как следует из документации и литературы по яве. Я ошибаюсь? Цитата А может мне просто убрать два ключевых слова -- const и mutable и не захламлять код? Лучше вообще не программировать Добавлено Цитата korvin @ В АгдЕ =) ![]() ![]() data Vec (A : Set) : Nat -> Set where [] : Vec A zero _::_ : {n : Nat} -> Vec A n -> A -> Vec A (succ n) Вот я и говорю, что непрактично. Добавлено Цитата korvin @ Специально -- могу, случайно -- нет. Почему? Откуда ты знаешь нагадишь ты или нет, если сигнатура метода об этом ничего не говорит, а о внутренней структуре ты ничего не знаешь? |
|
Сообщ.
#6684
,
|
|
|
|
Цитата D_KEY @ ![]() ![]() class Main { static int x; public static void main (String[] args) throws java.lang.Exception { System.out.println(x); x += 100; System.out.println(x); } } Это приводит именно к изменению значения x, как следует из документации и литературы по яве. Я ошибаюсь? неет, это изменение биндинга переменной x. Я же уже объяснял. Попробуй написать аналог ![]() ![]() #include <iostream> void change(int &x) { x += 100; } int main() { int x = 0; std::cout << x << std::endl; change(x); std::cout << x << std::endl; } Ну не нравится называть такие данные в джаве (и других языках) иммутабельными, давай называть их атомарными что ли. Суть лишь в том, что ты не можешь переписать данные в размещении. Только пересвязать переменную с другим значением. Поэтому для таких данных не имеет значение как передавать -- по ссылке или по значению, для кода это все одинаково. Добавлено Цитата D_KEY @ Вот я и говорю, что непрактично. Что ж здесь непрактичного? o_O' Кратко, ясно и все контракты соблюдены. Добавлено Цитата D_KEY @ Почему? Откуда ты знаешь нагадишь ты или нет, если сигнатура метода об этом ничего не говорит, а о внутренней структуре ты ничего не знаешь? А нафейхоа, простите, мне знать, как там устроен метод size() и что он там внутри изменяет? Если это необходимо для его работы -- ради бога. Мне нужно знать только интерфейс и назначение метода (если из сигнатуры это не ясно), а как он это делает -- его заботы. Единственное, что мне интересно во внутреннем устройстве класса, так это, например, какой он вид списка реализует -- динамические массивы там или связный список. Но это обычно понятно из имени класса или его описании в документации/комментариях. Добавлено Нет, вот скажи мне, есть у тебя какой-то (чужой) класс List, у него size() без спецификатора const, ты просто не станешь использовать этот класс и найдешь/напишешь другой взамен? =) |
|
Сообщ.
#6685
,
|
|
|
|
Цитата korvin @ Так если у тебя написано const - это и значит, что не изменяет. А если не написано - надо читать документацию или лезть в реализацию.А нафейхоа, простите, мне знать, как там устроен метод size() и что он там внутри изменяет? Получается какое-то общение вида: "- const позволяет не знать о реализации. - Бесполезная вещь. Зачем мне знать о реализации?" |
|
Сообщ.
#6686
,
|
|
|
|
Цитата korvin @ неет, это изменение биндинга переменной x. В Ява - нет. Или пруф давай. Вот в питоне, например, да, так и есть. Цитата Попробуй написать аналог В яве явных ссылочных типов нет. Цитата Суть лишь в том, что ты не можешь переписать данные в размещении. Могу и именно это я и сделал в своем примере. Цитата Что ж здесь непрактичного? o_O' Кратко, ясно и все контракты соблюдены. Да, но они тут написаны, а кто их будет описывать, да еще в таком виде? А программировать когда? И таким "вектором" совершенно неудобно пользоваться - он ничего не умеет. Ты вот такой вектор покажиhttp://www.cplusplus.com/reference/vector/vector/. Добавлено Цитата korvin @ А нафейхоа, простите, мне знать, как там устроен метод size() и что он там внутри изменяет? Иначе ты не сможешь сказать, нагадишь в него или нет. Вот при наличии const - можешь. Цитата Если это необходимо для его работы -- ради бога. Мне нужно знать только интерфейс и назначение метода (если из сигнатуры это не ясно), а как он это делает -- его заботы. Он все это может делать и при наличии const. Но ты видишь, что создатель класса указал тебе, что этот метод не изменит видимого состояния объекта и ты можешь спокойно его вызывать. Цитата Нет, вот скажи мне, есть у тебя какой-то (чужой) класс List, у него size() без спецификатора const, ты просто не станешь использовать этот класс и найдешь/напишешь другой взамен? =) Если в С++, то не стану его использовать. Если в других языках, то придется верить - выбора нет. |
|
Сообщ.
#6687
,
|
|
|
|
Цитата korvin @ Нет, вот скажи мне, есть у тебя какой-то (чужой) класс List, у него size() без спецификатора const, ты просто не станешь использовать этот класс и найдешь/напишешь другой взамен? Эммм... Да! Добавлено Цитата korvin @ А нафейхоа, простите, мне знать, как там устроен метод size() и что он там внутри изменяет? А const тебе и не говорит о том, что size() ничего не изменяет. Он говорит о том, что после вызова size() логическое состояние объекта не изменится. |
|
Сообщ.
#6688
,
|
|
|
|
Цитата trainer @ Получается какое-то общение вида: "- const позволяет не знать о реализации. - Бесполезная вещь. Зачем мне знать о реализации?" |
|
Сообщ.
#6689
,
|
|
|
|
Цитата korvin @ Если он такой - то лучше его не использовать. Мало ли что у него там еще оригинально сделано. вот скажи мне, есть у тебя какой-то (чужой) класс List, у него size() без спецификатора const, ты просто не станешь использовать этот класс и найдешь/напишешь другой взамен? |
|
Сообщ.
#6690
,
|
|
|
|