Информация об изменениях

Сообщение Re[10]: Мнение: объектно-ориентированное программирование — от 12.09.2019 11:11

Изменено 12.09.2019 11:16 fmiracle

Re[10]: Мнение: объектно-ориентированное программирование —
Здравствуйте, B0FEE664, Вы писали:

S>>Объект с состоянием и объект с изменяемым состоянием — не одно и то же. Изменяемое состояние для ФП нетипично. Но с хранением неизменяемого состояния никаких проблем в ФП вообще нет. Умеет же ФП работать со строками/списками. В чем проблема взять неизменяемый кусок памяти?


BFE>Неизменяемый кусок памяти — это константный объект, с ними никаких проблем, только это не буфер, т.к. в буфер можно записывать данные.


Ну тебе буфер нужен же не для того чтобы именно в вот эту область памяти тупо записать и перезаписать данные? Он нужен для того, чтобы где-то накопить данные, которые далее можно использовать, так ведь?
Ну объединяем эти неизменяемые области памяти в связный список и обрабатываем по частям — получаем накопление состояния, но без изменения этих самых блоков. Только копирования туда-сюда, целиком или частями, как там в задаче потребности.

Вот возьмем C#
string s = "";
for( int i =0; i < 100; ++i ){
  s += ReadDataPart();
}
s = s.Substring( s.length / 2 );


Логически — тут постоянно меняется содержимое в строке s. А технически — нет, не меняется, строки неизменяемы в C#.

А если взять код
string s = GetHalf( FillString( "", 100 ) );

//...

string GetHalf( string s ){
   return s.Substring( s.length / 2 );
}

string FillString( string s, int count ){
  if( count == 0 ){
    return s;
  }
  return FillString( s + ReadDataPart( s ), count - 1);
}


То мы избавимся еще и от изменяемых переменных. А суть кода осталась та же — накопить длинную строку и отрезать от нее половину.
Re[10]: Мнение: объектно-ориентированное программирование —
Здравствуйте, B0FEE664, Вы писали:

S>>Объект с состоянием и объект с изменяемым состоянием — не одно и то же. Изменяемое состояние для ФП нетипично. Но с хранением неизменяемого состояния никаких проблем в ФП вообще нет. Умеет же ФП работать со строками/списками. В чем проблема взять неизменяемый кусок памяти?


BFE>Неизменяемый кусок памяти — это константный объект, с ними никаких проблем, только это не буфер, т.к. в буфер можно записывать данные.


Ну тебе буфер нужен же не для того чтобы именно в вот эту область памяти тупо записать и перезаписать данные? Он нужен для того, чтобы где-то накопить данные, которые далее можно использовать, так ведь?
Ну объединяем эти неизменяемые области памяти в связный список и обрабатываем по частям — получаем накопление состояния, но без изменения этих самых блоков. Только копирования туда-сюда, целиком или частями, как там в задаче потребности.

Вот возьмем C#
string s = "";
for( int i =0; i < 100; ++i ){
  s += ReadDataPart();
}
s = s.Substring( s.length / 2 );


Логически — тут постоянно меняется содержимое в строке s. А технически — нет, не меняется, строки неизменяемы в C#.

А если взять код
string s = GetHalf( FillString( "", 100 ) );

//...

string GetHalf( string s ){
   return s.Substring( s.length / 2 );
}

string FillString( string s, int count ){
  if( count == 0 ){
    return s;
  }
  return FillString( s + ReadDataPart(), count - 1 );
}


То мы избавимся еще и от изменяемых переменных. А суть кода осталась та же — накопить длинную строку и отрезать от нее половину.