Сообщение Re[10]: Мнение: объектно-ориентированное программирование — от 12.09.2019 11:11
Изменено 12.09.2019 11:13 fmiracle
Re[10]: Мнение: объектно-ориентированное программирование — катастрофа на трилли
Здравствуйте, B0FEE664, Вы писали:
S>>Объект с состоянием и объект с изменяемым состоянием — не одно и то же. Изменяемое состояние для ФП нетипично. Но с хранением неизменяемого состояния никаких проблем в ФП вообще нет. Умеет же ФП работать со строками/списками. В чем проблема взять неизменяемый кусок памяти?
BFE>Неизменяемый кусок памяти — это константный объект, с ними никаких проблем, только это не буфер, т.к. в буфер можно записывать данные.
Ну тебе буфер нужен же не для того чтобы именно в вот эту область памяти тупо записать и перезаписать данные? Он нужен для того, чтобы где-то накопить данные, которые далее можно использовать, так ведь?
Ну объединяем эти неизменяемые области памяти в связный список и обрабатываем по частям — получаем накопление состояния, но без изменения этих самых блоков. Только копирования туда-сюда, целиком или частями, как там в задаче потребности.
Вот возьмем C#
Логически — тут постоянно меняется содержимое в строке s. А технически — нет, не меняется, строки неизменяемы в C#.
А если взять код
То мы избавимся еще и от изменяемых переменных. А суть кода осталась та же — накопить длинную строку и отрезать от нее половину.
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 s + ReadData( s, count - 1 );
}То мы избавимся еще и от изменяемых переменных. А суть кода осталась та же — накопить длинную строку и отрезать от нее половину.
Re[10]: Мнение: объектно-ориентированное программирование —
Здравствуйте, B0FEE664, Вы писали:
S>>Объект с состоянием и объект с изменяемым состоянием — не одно и то же. Изменяемое состояние для ФП нетипично. Но с хранением неизменяемого состояния никаких проблем в ФП вообще нет. Умеет же ФП работать со строками/списками. В чем проблема взять неизменяемый кусок памяти?
BFE>Неизменяемый кусок памяти — это константный объект, с ними никаких проблем, только это не буфер, т.к. в буфер можно записывать данные.
Ну тебе буфер нужен же не для того чтобы именно в вот эту область памяти тупо записать и перезаписать данные? Он нужен для того, чтобы где-то накопить данные, которые далее можно использовать, так ведь?
Ну объединяем эти неизменяемые области памяти в связный список и обрабатываем по частям — получаем накопление состояния, но без изменения этих самых блоков. Только копирования туда-сюда, целиком или частями, как там в задаче потребности.
Вот возьмем C#
Логически — тут постоянно меняется содержимое в строке s. А технически — нет, не меняется, строки неизменяемы в C#.
А если взять код
То мы избавимся еще и от изменяемых переменных. А суть кода осталась та же — накопить длинную строку и отрезать от нее половину.
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 s + ReadDataPart( s, count - 1 );
}То мы избавимся еще и от изменяемых переменных. А суть кода осталась та же — накопить длинную строку и отрезать от нее половину.