Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
3 / 4 / 1
Регистрация: 18.08.2017
Сообщений: 77

Холивары вокруг C++

26.05.2024, 13:30. Показов 13278. Ответов 160
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
админы совсем не хотят менять мне ник, потому что у меня нету 100 сообщений. мусор создавать в виде пустых сообщений не вижу смысла. так давайте немного философии.

На этом форуме живет один мой очень древний знакомый Андрээ С, который здесь точно и однозначно был админом. когда то давно он даже активно пытался меня банить, когда я любил немного пошалить и потролить кодеров. Так вот, прошло лет 10, а наша основная тема спора оказывается до сих пор актуальна. Спор у меня недавно возник с другим кодером, потому с Андрэ Мандрэ мы очень давно не общались. Суть спора можно объяснить одной его фразой: "С# это кастрированный с++". ну типа существует язык цпп для реальных программистов, а си шарп это какая та дичь не понятно для кого вообще и не понятно зачем.

Дело в том, что я даже поверил этому и начал один из своих проектов кодить на цпп. Ну думал такой, что щас подтяну знания реально крутого языка, на котором написаны почти все крупные проекты. ФИГ!
Я не помню точно на чем я забуксовал, но точно помню финальную мысль - это кал вонючий, на котором нету вообще никаких удобств, траблы с библиотеками (может быть сейчас не актуально уже) и вообще как работать с объектами когда всё настолько хреново.

вот простые моменты, от которых жопа сразу сгорает мгновенно:
1. статические массивы. если мне надо добавить что-то в середине массива, то это танцы с бубном с пересозданием.
2. надо следить за памятью и чистить все неиспользуемые переменные, ибо память бесконтрольно засирается
3. отсутствие таких коллекций как List<T>, ObservableCollection, dictionary и тд... просто без комментариев
4. отсутсвие linq
n. примитивная низкоуровневость

дальше можно просто не перечислять. вот этих пунктов достаточно, чтобы вместо нормальной разработки какой нибудь полезной штуковины мне пришлось бы заниматься реальным дрочевом с низкоуровневым кодом, где искать где какие индексы не так были назначены...

в си шарпе у меня объекты на объектах, они крупные и каждый класс насыщен большим количеством логики. я просто не представляю сколько времени мне бы пришлось убить на возню в с++, это просто страшно.
я понимаю конечно, что как бы "СКОРОСТЬ РАБОТЫ РЕШАЕТ!", что софт на шарпе по определению работает медленнее потому что управляемый код и тд... но всему своё место. я не майнер пишу, который должен быть оптимизирован по максимуму.
есть смысл всю логику перегонять на быстрые языки, если это игровой движок - ну там чем быстрее код работает, тем больше объектов отрисовывает, тут как бы ок. есть смысл нанять толпу батанов из вычислительного центра НАСА, чтобы кодили 24/7 каждую мелочь на цпп и гнались за каждой выйгранной миллисекундой, вполне возможно это действительно оправдано.

только в обычном бытовом коде это вообще нафиг не нужно и мне не понятны такие люди, которые хейтят питон и си шарп. и сколько пересекаюсь с разными кодерами, каждый десятый попадается с такой пулей в голове. питон то перестали хейтить, ибо нейронки и это уже не тот питон что был на 3 версии. а на си шарп гонят конкретно. коточе как то так. вопросов у меня нету, +1 к сообщениям накатал. спасибо за внимание. приятной вам работы с цпп, а лучше просто на си. ну так, чтобы больше хардкора, чтобы доказать всем что ты настоящий программист
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2024, 13:30
Ответы с готовыми решениями:

Холивары: непрофессионализм или конкуренция
Забавно наблюдать за любым холиваром. Притом в любом холиваре может быть более двух сторон. И каждая сторона, побивая себя пятой в грудь,...

Изобразить на форме отрезок, который вращается вокруг своей концевой точки. Вокруг произвольной своей точки. Вокруг п
Изобразить на форме отрезок, который вращается вокруг своей концевой точки. Вокруг произвольной своей точки. Вокруг произвольной точки...

Создать модель движения Солнца вокруг орбиты, Земли вокруг Солнца, Луны вокруг земли
Вот есть набросок, что дальше? :help: Const pi = 3.14 Dim intRev As Single Private Sub Command1_Click() BackColor = vbBlue ...

160
Эксперт .NET
 Аватар для Usaga
14727 / 9503 / 1362
Регистрация: 21.01.2016
Сообщений: 35,831
05.06.2024, 06:27
Студворк — интернет-сервис помощи студентам
NET Core уже восемь лет как с нами. С разморозкой, мистер Ludwig Valentin.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
05.06.2024, 06:38
Цитата Сообщение от Usaga Посмотреть сообщение
NET Core
NET Core без Windows Forms.
Можно использовать Gtk#, но это не самая удобная оконная система.
В Java тоже ненамного лучше - JavaFX довольно сложная,
но зато Java намного компактнее .NET. В пакетах.
0
Эксперт .NET
 Аватар для Usaga
14727 / 9503 / 1362
Регистрация: 21.01.2016
Сообщений: 35,831
05.06.2024, 06:44
Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
NET Core без Windows Forms.
И что? C# далеко не только для разработки настольных приложений используется.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
05.06.2024, 06:46
Цитата Сообщение от Usaga Посмотреть сообщение
И что? C# далеко не только для разработки настольных приложений используется.
JSP не намного хуже ASP.NET.
Очень удобный язык. Особенно удобен с сервером приложений Tomcat.
0
Эксперт .NET
 Аватар для Usaga
14727 / 9503 / 1362
Регистрация: 21.01.2016
Сообщений: 35,831
05.06.2024, 06:53
Ludwig Valentin, да плевать, что там где удобнее. C# уже лет восемь как кроссплатформеннен. А если учитывать Mono, то ещё дольше. Для этого не надо 100% возможностей винды везде поддерживать.
0
3 / 4 / 1
Регистрация: 18.08.2017
Сообщений: 77
05.06.2024, 20:26  [ТС]
почитал статью на хабре. ну допустим библиотека спасёт с линку, только в шарпе это часть языка, у вас костыльная библиотека. ну да ладно.
а дальше чо?) наследования классов, автоочистка памяти, события и делегаты в нормальном виде, асинхронные функции... ну главная суть не в этом. на шарпе легко и просто работать с большими объектами с кучей логики, на цпп это ад.
0
фрилансер
 Аватар для Алексей1153
6500 / 5731 / 1133
Регистрация: 11.10.2019
Сообщений: 15,337
05.06.2024, 20:34
Alex TROCKII, нууу

Цитата Сообщение от Alex TROCKII Посмотреть сообщение
наследования классов
даже множественное и ромбовидное есть

Цитата Сообщение от Alex TROCKII Посмотреть сообщение
автоочистка памяти
зачем это может понадобиться? В C++ нет необходимости в этом

Цитата Сообщение от Alex TROCKII Посмотреть сообщение
события и делегаты в нормальном виде
лямбды и std::function

Цитата Сообщение от Alex TROCKII Посмотреть сообщение
асинхронные функции
std::thread , std::async

Цитата Сообщение от Alex TROCKII Посмотреть сообщение
на шарпе легко и просто работать с большими объектами с кучей логики
всё то же самое. Можно взять и просто начать работать с большим объектом с кучей логики
0
3 / 4 / 1
Регистрация: 18.08.2017
Сообщений: 77
05.06.2024, 23:36  [ТС]
кстати, что с wpf на цпп? это вообще существует?

Добавлено через 3 минуты
можете не отвечать, чат гпт мне уже ответил

Code
1
2
3
4
5
6
7
You
wpf существует для с++?
 
Copilot
WPF (Windows Presentation Foundation) — это платформа для создания графического интерфейса пользователя, которая является частью .NET Framework и предназначена для использования с языками программирования, такими как C# и VB.NET1. Однако, если вы хотите использовать WPF с C++, вы можете воспользоваться C++/CLI, который является расширением C++ для работы с .NET2. Это позволит вам создавать управляемые приложения, использующие WPF для графического интерфейса.
 
Таким образом, хотя WPF напрямую не предназначен для использования с C++, с помощью C++/CLI можно создать мост между управляемым кодом .NET и нативным кодом C++, что позволяет использовать WPF в проектах на C++3. Однако, это может потребовать дополнительных усилий по интеграции и управлению кодом, поскольку C++/CLI имеет свои особенности и ограничения по сравнению с традиционным C++.
то есть среди косяков цпп будет ещё отсутствие нормального графического фреимворка лол)))
0
Модератор
Эксперт Java
 Аватар для alecss131
2895 / 1401 / 412
Регистрация: 11.08.2017
Сообщений: 4,488
Записей в блоге: 2
06.06.2024, 00:47
Цитата Сообщение от Alex TROCKII Посмотреть сообщение
то есть среди косяков цпп будет ещё отсутствие нормального графического фреимворка
А чего нормального в WPF? Да и он только под виндой.
Для меня нормальный графический фреймворк это SwiftUI и более старый IB/UIKit (если говорить про императивное создание гуи). Но я не считаю другие языки ущербными потому что в них этого нету. Для меня эти 2 инструмента самые удобные и быстрые для написания гуи под macos и ios.
Если же вернуться к С++, то у него есть отличный и кроссплатформенный фреймворк Qt, там куча всего, ни разу не костыльное и даст фору всему стандартному из шарпа. Даже есть свой аналог SwiftUI в виде QML, хотя в нем мне не нравится что используется другой язык.
А что есть стабильное и популярное так же, но для шарпа и с декларативным стилем создания гуи? У андроида с его котлином есть фреймворк Jetpack Compose, даже есть десктопный вариант. Но это уже ближе к джаве, так как котлин и джава работают на одной виртуальной машине.

Кстати, Ваш шарп декомпилируется на раз два и исходники достаются без особых проблем, даже проще джавы. Не говоря уже про защиту программ от взлома. В плюсах это все куда сложнее ибо нативны на выходе.
0
фрилансер
 Аватар для Алексей1153
6500 / 5731 / 1133
Регистрация: 11.10.2019
Сообщений: 15,337
06.06.2024, 04:55
Alex TROCKII, это не косяк. В C++ принципиально отсутствует графика, потому что всем нужно что-то разное, на всех не угодишь. Каждый берёт себе нужную библиотеку/фреймворк - и вперёд с песней
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,041
Записей в блоге: 1
06.06.2024, 08:30
Цитата Сообщение от alecss131 Посмотреть сообщение
Даже есть свой аналог SwiftUI в виде QML, хотя в нем мне не нравится что используется другой язык.
Мне сложно представить тоже самое (QML) в виде C++.
А вообще, QML зачетный.

Если что, вот есть небольшой списочек библиотек для UI: C++ UI Libraries
0
3 / 4 / 1
Регистрация: 18.08.2017
Сообщений: 77
06.06.2024, 09:38  [ТС]
в впф мне понравились бинды, изначально я работал в винформс, но уперся в создании кастомных контролов. там начались проблемы когда я пытаюсь создать панель слайдер, во внутрь которой можно будет пихать другие контролы. ни гугол ни гпт не знает как это реализовать, в нэт 4 всё работает, на нэт 8 всё ломается и контролы внутри моего тупо не отображаются. хз как это фиксить, мне просто кажется что разрабы забили на винформс и ничего не собираются фиксить там, тупо баг. я покапался в исходниках стандартных контролов, но потом мне подсказали впф.

впф меня порадовал, бинды это вообще классная тема. просто вривязался к полю и забыл о проблемах. для mvvm идеально, никаких танцев с событиями.

а ещё в впф уже была готова та панель, которую я кодил. плюс авалондок панель, это панель которую можно двигать, перемещать и менять размер, она мне нужна для интерфейса и её нету готовой для винформс. сделать не могу, ибо странные ошибки в винформс. ну как то так
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,041
Записей в блоге: 1
06.06.2024, 09:46
Цитата Сообщение от Alex TROCKII Посмотреть сообщение
впф меня порадовал, бинды это вообще классная тема. просто вривязался к полю и забыл о проблемах. для mvvm идеально, никаких танцев с событиями.
В QML свойства по дефолту биндится, в плюсовую часть Qt6 тоже завезли.
0
Эксперт .NET
 Аватар для Usaga
14727 / 9503 / 1362
Регистрация: 21.01.2016
Сообщений: 35,831
06.06.2024, 10:01
Цитата Сообщение от alecss131 Посмотреть сообщение
Для меня нормальный графический фреймворк это SwiftUI
Я с ним уже полгода работаю. За называния этого адища нормальным я бы стулом по темечку двинул)
0
Модератор
Эксперт Java
 Аватар для alecss131
2895 / 1401 / 412
Регистрация: 11.08.2017
Сообщений: 4,488
Записей в блоге: 2
06.06.2024, 11:36
Цитата Сообщение от Usaga Посмотреть сообщение
За называния этого адища нормальным я бы стулом по темечку двинул)
Что не нравится? И почему навязывание? В новых версиях убрали возможность писать на UIKit? Я просто изза железа завис на macos 10.15 и ios 12, там только зачатки SwiftUI, нету поддержки жизненного цикла SwiftUI, только AppDelegate, новое можно выбрать и даже скомпилировать, но толку от этого, все равно для запуска нужны ОС посвежее.
Я после SwiftUI попробовал андроидовский Jetpack Compose, вот он куда более многословный и менее удобный.
Но в любом случае я пока никак не могу понять жизненный цикл всего этого добра и как сделать объект живущий все время жизни программы (например написание 3д графики на Metal, которое даже удобнее и не сложнее OpenGL, создание объекта тяжелое и надо всего раз создавать). Ведь всякие state environment и прочее могут пересоздаваться. И еще пока никак не пойму как использовать mvc/mvp/mvvm в таком стиле написания ГУИ
Вот мои нубские примеры кода калькулятора на SwiftUI
Кликните здесь для просмотра всего текста
Странно что при выносе создания элементов в функции ломается превьюшка. Так вообще можно делать? Код собирается без ошибок и запускается и работает тоже норм. Не откажусь от критики кода, хотя бы места которые использовать точно не стоит. Я только начал изучение и пока нормальной обучающей информации сложно найти
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
import SwiftUI
import Foundation
 
enum Action{
    case none
    case multiply
    case add
    case subtract
    case divide
}
 
struct ContentView: View {
    @State
    var scr: String = "0"
    
    @State
    var mem: String = "0"
    
    @State
    var act: Action = .none
    
    @State
    var clear: Bool = false
    
    var body: some View {
        VStack{
            TextField("0", text: $scr)
                .disableAutocorrection(true)
                .multilineTextAlignment(.trailing)
                .disabled(true)//.fixedSize()
            HStack{
                leftPannel()
                rightPannel()
            }
        }.padding(10)
    }
            
    func digitKey(number: Int) -> some View {
        Button(String(number)) {
            if let num = Int(scr), num == 0 {
                scr = ""
            }
            if clear {
                clear = false
                scr = ""
            }
            scr.append(String(number))
        }
    }
    
    func rightPannel() -> some View {
        VStack{
            HStack{
                Button("C"){
                    scr = "0"
                    clear = false
                }
                Button("CE"){
                    scr = "0"
                    mem = "0"
                    act = .none
                    clear = false
                }
                Button("\u{221A}"){ //sqrt
                    if let num = Float(scr), num > 0 {
                        let a = num.squareRoot()
                        scr = a.rounded() == a ? String(Int(a)) : String(a)
                    }
                }
            }
            HStack{
                Button("\u{00D7}"){ //multiply
                    calc()
                    act = .multiply
                }
                Button("\u{00F7}"){ //divide
                    calc()
                    act = .divide
                }
                Button("\u{0025}"){ //percent
                    if let a = Float(scr), let b = Float(mem) {
                        let a = b / 100 * a
                        scr = a.rounded() == a ? String(Int(a)) : String(a)
                    }
                }
            }
            HStack{
                Button("\u{002B}"){ //plus
                    calc()
                    act = .add
                }
                Button("\u{002D}"){ //minus
                    calc()
                    act = .subtract
                }
                Button("\u{003D}"){ //eqals
                    calc()
                }
            }
        }
    }
    
    func calc() {
        if scr == "error" { return }
        if let a = Float(mem), let b = Float(scr) {
            switch act {
            case .add: scr = String(a + b)
            case .subtract: scr = String(a - b)
            case .multiply: scr = String(a * b)
            case .divide: scr = b == 0 ? "error" : String(a / b)
            default: break
            }
            if let a = Float(scr), a.rounded() == a { scr = String(Int(a)) }
            act = .none
        }
        clear = true
        mem = scr
    }
    
    func leftPannel() -> some View {
        VStack{
            HStack{
                digitKey(number: 1)
                digitKey(number: 2)
                digitKey(number: 3)
            }
            HStack{
                digitKey(number: 4)
                digitKey(number: 5)
                digitKey(number: 6)
            }
            HStack{
                digitKey(number: 7)
                digitKey(number: 8)
                digitKey(number: 9)
            }
            HStack{
                digitKey(number: 0)
                Button("."){
                    if !scr.contains(".") {
                        scr.append(".")
                    }
                }
                Button("\u{00B1}"){ //plus-or-minus
                    if scr.contains("-") {
                        scr.remove(at: scr.startIndex)
                    } else {
                        scr.insert("-", at: scr.startIndex)
                    }
                }
            }
        }
    }
}

И Jetpack Compose
Кликните здесь для просмотра всего текста
Эти onClick и помещение лэйблов в кнопки то еще удобство. А работа с опционалами вообще жесть, я не говорю еще про конструкторы. Swift в этом плане куда приятней
Kotlin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
package ru.drbass.calc
 
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.safeContentPadding
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextAlign
import kotlin.Float.Companion.NaN
import kotlin.math.abs
import kotlin.math.floor
import kotlin.math.sqrt
 
enum class Action {
    none, multiply, add, subtract, divide
}
 
class MainActivity : ComponentActivity() {
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            val scr = remember{mutableStateOf("0")}
            val mem = remember{mutableStateOf("0")}
            val act = remember{mutableStateOf(Action.none)}
            val clear = remember{mutableStateOf(false)}
 
            Surface(modifier = Modifier.safeContentPadding()) {
                Column {
                    TextField(
                        value = scr.value, onValueChange = {}, readOnly = true,
                        textStyle = LocalTextStyle.current.copy(textAlign = TextAlign.End)
                    )
                    Row(horizontalArrangement = Arrangement.Center) {
                        CreateNumberButton(scr, 1, clear)
                        CreateNumberButton(scr, 2, clear)
                        CreateNumberButton(scr, 3, clear)
                        Button(onClick = {
                            scr.value = "0"
                            clear.value = false
                        }) {
                            Text("C")
                        }
                        Button(onClick = {
                            scr.value = "0"
                            clear.value = false
                            mem.value = "0"
                            act.value = Action.none
                        }) {
                            Text("CE")
                        }
                        Button(onClick = {
                            var a = scr.value.toFloatOrNull()
                            if (a != null && a > 0) {
                                a = sqrt(a)
                                scr.value = if (floor(a) == a) a.toInt().toString() else a.toString()
                            }
                        }) { //sqrt
                            Text("\u221A")
                        }
                    }
                    Row(horizontalArrangement = Arrangement.Center) {
                        CreateNumberButton(scr, 4, clear)
                        CreateNumberButton(scr, 5, clear)
                        CreateNumberButton(scr, 6, clear)
                        Button(onClick = {
                            calc(scr, mem, act, clear)
                            act.value = Action.multiply
                        }) { //multiply
                            Text("\u00D7")
                        }
                        Button(onClick = {
                            calc(scr, mem, act, clear)
                            act.value = Action.divide
                        }) { //divide
                            Text("\u00F7")
                        }
                        Button(onClick = {
                            val a = scr.value.toFloatOrNull()
                            val b = mem.value.toFloatOrNull()
                            if (a != null && b != null) {
                                val c = b * a / 100.0f
                                scr.value = if (floor(c) == c) c.toInt().toString() else c.toString()
                            }
                        }) { //percent
                            Text("\u0025")
                        }
                    }
                    Row(horizontalArrangement = Arrangement.Center) {
                        CreateNumberButton(scr, 7, clear)
                        CreateNumberButton(scr, 8, clear)
                        CreateNumberButton(scr, 9, clear)
                        Button(onClick = {
                            calc(scr, mem, act, clear)
                            act.value = Action.add
                        }) {  //plus
                            Text("\u002B")
                        }
                        Button(onClick = {
                            calc(scr, mem, act, clear)
                            act.value = Action.subtract
                        }) { //minus
                            Text("\u002D")
                        }
                        Button(onClick = {
                            calc(scr, mem, act, clear)
                        }) { //eqals
                            Text("\u003D")
                        }
                    }
                    Row(horizontalArrangement = Arrangement.Center) {
                        CreateNumberButton(scr, 0, clear)
                        Button(onClick = { if (!scr.value.contains(".")) scr.value += "." }) {
                            Text(".")
                        }
                        Button(onClick = {
                            if (scr.value.startsWith('-')) scr.value.removePrefix("-")
                            else scr.value = "-" + scr.value
                        }) {
                            Text("\u00B1")
                        }
 
                    }
                }
            }
        }
    }
}
fun calc(scr: MutableState<String>, mem: MutableState<String>, act: MutableState<Action>, clear: MutableState<Boolean>) {
    if (scr.value == "error") return
    val a = scr.value.toFloatOrNull()
    val b = mem.value.toFloatOrNull()
    if (a != null && b != null) {
        val c = when (act.value) {
            Action.add -> a + b
            Action.subtract -> a - b
            Action.multiply -> a * b
            Action.divide -> if (abs(b) < 0.0001f) NaN else a / b
            Action.none -> 0.0f
        }
        scr.value = if (floor(c) == c) c.toInt().toString() else c.toString()
        act.value = Action.none
        clear.value = true
        mem.value = scr.value
    }
 
}
 
@Composable
fun CreateNumberButton(scr: MutableState<String>, num: Int, clear: MutableState<Boolean>) {
    Button(onClick = {
        val a = scr.value.toIntOrNull()
        if (a != null && a == 0) scr.value = ""
        if (clear.value) {
            clear.value = false
            scr.value = ""
        }
        scr.value += num.toString()
    }, colors = ButtonDefaults.buttonColors(
        contentColor = Color(0xff004D40),
        containerColor = Color(0xff9ed6df)
    )) {
        Text(num.toString())
    }
}

Цитата Сообщение от Croessmah Посмотреть сообщение
Мне сложно представить тоже самое (QML) в виде C++.
Вот выше 2 примера, где код на Swift и на Kotlin, все нормально, а зачем в QML все запихали в отдельные файлы и используется JS не понимаю.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,041
Записей в блоге: 1
06.06.2024, 11:38
Цитата Сообщение от Usaga Посмотреть сообщение
За называния
Цитата Сообщение от alecss131 Посмотреть сообщение
И почему навязывание?
Называние, не навязывание.
0
06.06.2024, 11:39

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Называние, не навязывание.
Я еще не проснулся

0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,041
Записей в блоге: 1
06.06.2024, 11:43
Цитата Сообщение от alecss131 Посмотреть сообщение
все запихали в отдельные файлы и используется JS
Не понял о чем Вы.
Цитата Сообщение от alecss131 Посмотреть сообщение
Вот выше 2 примера, где код на Swift и на Kotlin
Ну вот, а как это бы выглядело в синтаксисе C++? Была бы жесть.
0
Эксперт .NET
 Аватар для Usaga
14727 / 9503 / 1362
Регистрация: 21.01.2016
Сообщений: 35,831
06.06.2024, 12:21
Цитата Сообщение от alecss131 Посмотреть сообщение
Что не нравится?
Крайне не гибкий инструмент. Малейшая попытка кастомизации - и всё, упираешься в стену. Тормозит к тому же, на более-менее сложном UI. Писать на UIKit никто не запрещает, но руководство считает, что нужно двигаться вперёд, на новые технологии.

Нас тут двое с этой штукой работать пытаемся. И нас удивляет как одна из самых дорогих фирм планеты была способна такое дерьмо неюзабельное выдать. У меня от веба и CSS даже близко не было таких эмоций. А тут...
0
Модератор
Эксперт Java
 Аватар для alecss131
2895 / 1401 / 412
Регистрация: 11.08.2017
Сообщений: 4,488
Записей в блоге: 2
06.06.2024, 12:35
Usaga, У меня пока впечатления только положительные, хотя и есть много непоняток. А на фоне андроида так вообще кайф. На счет тормозов не знаю, пока только под мак писал и самое сложное это калькулятор выше.
Цитата Сообщение от Croessmah Посмотреть сообщение
Ну вот, а как это бы выглядело в синтаксисе C++? Была бы жесть.
не сильно бы отличалось, в моих кодах все фигурные скобочки после это просто вынос замыканий/лямбд за скобки (последний параметр в виде замыкания можно вынести за скобки при вызове функции/конструктора)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.06.2024, 12:35

Как вращать эллипс вокруг своей оси ? (вокруг себя)
напишите код плиз я вот написал для того чтобы эллипс вращался вокруг точки, а вот еще надо чтобы он вращался вокруг себя program...

поворот изображения вокруг своей оси во время движения по кругу вокруг центра
Cобственно требуется написать программу в Delphi в которой 2 машинки будут ездить по кругу, поворачиваясь в зависимости от положения на...

Почему рамка создаётся вокруг картинки, а не вокруг блока?
Не подскажите ещё кое-что? Не хочу засорять тему HTML/CSS своими простецкими вопросами. Почему у меня в примере рамка создаётся лишь вокруг...

Вращение планеты вокруг солнца, и вокруг своей оси
У меня есть Солнце, которое находиться в координатах(0.0.0), и нужно вращать планеты, как по орбите, и вокруг свой оси. Вот код двух...

Разработайте динамическую модель Земли, которая вращается вокруг Солнца и вокруг которой вращается Луна
2) Разработайте динамическую модель Земли, которая вращается вокруг Солнца и вокруг которой вращается Луна.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru