четверг, 28 сентября 2017 г.

Ссылка

http://www.sql.ru/forum/605052-a/kto-chto-dumaet-ob-uml-moda-proshla

Интересно послушать

Ну так может кто расскажет чем заменить select count *?

Ещё

Цитата: "uml-модели отдаляют заказчика от понимания реальной сути проблемы, а разработчика от понимания того как это всё устроено на уровне "байтов" (Joel)".

(Неточный перевод с немецкого)

Ещё неплохо сказано

Ещё цитата: "c++ uml-модели не нужны ибо там и так есть сильно развитые средства мета-программирования. Надо лишь уметь грамотно ими пользоваться".

Хорошо так сказано

Цитата: "Я не держусь за uml-модели как за ортодоксальный троцкизм. Я применяю их только когда они реально нужны и реально ускоряют разработку. Я их использую по месту, в соответствии с необходимостью, а не везде и всюду, заради кристальной идеи и чистоты арийской рассы".

Про immutable

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

Что-то вроде:

type TPoint = class
 public
  X : Integer;
  Y : Integer;
  costructor Create(aX, aY: Integer);
end; // TPoint

...

Var [Immutable] p : TPoint;

...

p := TPoint.Create(10, 20);
p.X := 30; // - тут компилятор ругается

Ну и естественно методы хочется метить const/noconst.

Я в своих скриптах такое уже почти сделал.

Почти - потому, что компилятор пока не все случаи отлавливает. Но это специфика реализации компилятора скриптов. Слишком уж он гибок. И местами на duckTyping заточен.

Но хотя бы в runTime - ругается. Если в compileTime не распознал.

среда, 27 сентября 2017 г.

Ещё про скрипты

Можно написать:

TPixel VAR Pixel
Pixel := 100
Pixel := px: 100
Pixel := inch: 1
Pixel := cm: 3
Pixel := mm: 300
Pixel := twips: 10
Pixel := m: 3
Pixel := n: 4
Pixel := (default): 100

Т.е. можно задавать значения в разных единицах измерения. И они будут преобразовыватся к типу переменной.

Понятно, что это на самом деле конструктор + определение оператора :=.

Задумался о программировании GUI в "функциональном" стиле

Как-то так:

RunApplicationWithForms: (
 Form: Main TMainForm (
    Prop: Width 400
    Prop: Height 500
    Event: OnShow ( Message ( 'Show' Name: Sender ) )
    Event: OnExit ( Message ( 'Exit' Name: Sender ) )
   Control: Edit1 TEdit (
   )
   Control: Edit2 TEdit (
     Prop: Left 100
     Prop: Top 200
     Event: OnEnter ( Message ( 'Enter' Name: Sender ) )
     Control: Button1 TButton (
      Event: OnClick ( Message ( 'Click' Name: Sender ) )
     )
   )
  Control: Edit3 TEdit ()
  )
 )
)

Это на самом деле - цепочка лямбд. Все объекты - Immutable.

Надо обмозговать эту тему.

вторник, 26 сентября 2017 г.

Размышления. В каком порядке изучать языки программирования

Первый - C/C++ даже без вопросов. Потом Pascal. Потом ObjectPascal. Потом FORTH. Потом LISP. Потом Prolog. А потом только Python, Java, Ruby и все остальные.

Не про школьников естественно речь.

Для школьников надо начинать с Pascal (Object) и Python.

Мне так кажется.

Ассемблер надо конечно знать. Но "параллельно" всему остальному.

Ну и "в конце-концов" - функциональщина всё равно замаячит на горизонте.

среда, 20 сентября 2017 г.

Наблюдение

Лучше всего почему-то получаются рабочие задачи, которые записал на бумажке. Потом ещё раз записал. Потом опять записал. Потом выкинул бумажки в урну. Потом вспомнил и записал опять. Потом три раза вернулся. Подумал - "да не, бред". Потом опять записал. А потом тебе ставят "другую задачу" и "совсем не про то". А ты вспоминаешь про бумажки. И думаешь "вот оно"! И делаешь и задачу, которую поставили. И то, что так долго "мусолил". Вылежалось...

вторник, 5 сентября 2017 г.

Не перестаю удивляться

Не перестаю удивляться тому, что все операции сравнения могут быть выведены, через < (less), ! (not) и && (и):

bool operator> (A, B) {
 return (B < A);
}

bool operator>= (A, B) {
 return !(A < B);
}

bool operator<= (A, B) {
 return !(B < A);
}

bool operator== (A, B) {
 return ((A <= B) && (B >= A));
}

bool operator!= (A, B) {
 return !(A == B);
}

https://ru.m.wikipedia.org/wiki/Степанов,_Александр_Александрович_(учёный)