uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 420
Obunachilar
Ma'lumot yo'q24 soatlar
+27 kunlar
-230 kunlar
Postlar arxiv
ToCode
1 420
# ืขื•ื“ 3 ืคื™ืฆ'ืจื™ื ืฉืœ ES13 ื‘ื”ื ืืชื ืืฉื›ืจื” ื”ื•ืœื›ื™ื ืœื”ืฉืชืžืฉ ื’'ืื•ื•ื”ืกืงืจื™ืคื˜ ื›ืœ ื”ื–ืžืŸ ืžืชืงื“ืžืช ื•ืœืžืจื•ืช ืฉื›ื‘ืจ ื™ืจื“ื ื• ืžืจื›ื‘ืช ื”ื”ืจื™ื ืฉื”ื™ืชื” ES6, ืขื“ื™ื™ืŸ ื™ืฉ ืฉื™ืคื•ืจื™ื ืงื˜ื ื™ื ืฉื”ื•ืคื›ื™ื ืืช ื”ื—ื™ื™ื ืœืงืœื™ื ื™ื•ืชืจ ื›ืœ ื™ื•ื. ืื– ื ื›ื•ืŸ ื›ืฉื—ื•ืฉื‘ื™ื ืขืœ ES13 ืžื™ื“ ืงื•ืคืฅ ืœืจืืฉ ืกื™ืžืŸ ื”ืกื•ืœืžื™ืช ื•ื”ื™ื›ื•ืœืช ืœื”ื’ื“ื™ืจ ืคื•ื ืงืฆื™ื•ืช ืคืจื˜ื™ื•ืช, ืื‘ืœ ื”ืืžืช ืฉื‘ื–ื” ืื ื™ ืœื ืจื•ืื” ืกื™ื‘ื” ืœื”ืฉืชืžืฉ. ื”ื ื” 3 ืคื™ืฆ'ืจื™ื ืื—ืจื™ื ืฉื“ื•ื•ืงื ื›ืŸ ื™ื›ื•ืœื™ื ืœื”ื™ื›ื ืก ืœืงื•ื“ ืฉืœื™- ## ื”ืื™ื‘ืจ ื”ืื—ืจื•ืŸ ื‘ืžืขืจืš (ืกื•ืฃ ืกื•ืฃ) ื”ืคื™ืฆ'ืจ ืฉื”ื›ื™ ื—ื™ื›ื™ืชื™ ืœื• ื‘ JavaScript ื”ื’ื™ืข. ื˜ื•ื‘, ืœื ื‘ื“ื™ื•ืง ื‘ืฆื•ืจื” ืฉืจืฆื™ืชื™ ืื‘ืœ ืžืกืคื™ืง ื“ื•ืžื”. ืื ื™ืฉ ืœื›ื ื‘ื™ื“ ืžืขืจืš ืชื•ื›ืœื• ืœื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื” at ื›ื“ื™ ืœื’ืฉืช ืœืื™ื‘ืจื™ื ืขื ืชืžื™ื›ื” ื‘ืžืกืคืจื™ื ืฉืœื™ืœื™ื™ื ื›ื“ื™ ืœื’ืฉืช ืžื”ืกื•ืฃ. ื–ื” ื”ืงื•ื“:
const x = [10, 20, 30, 40, 50];

// prints: 50
console.log(x.at(-1));
## ื—ื™ืคื•ืฉ ืžื”ืกื•ืฃ ื•ืื ื›ื‘ืจ ืžื“ื‘ืจื™ื ืขืœ ืกื•ืฃ, ื”ืคื•ื ืงืฆื™ื” findLast ื”ื™ื ื›ืžื• find ืื‘ืœ ืžื”ืกื•ืฃ. ื–ื” ื ืจืื” ื›ื›ื”:
const x = [10, 20, 30, 40, 50];

// prints 50
x.findLast(i => i > 30)

// prints 40
x.find(i => i > 30)
## ืืคืฉืจ ืœื›ืชื•ื‘ await ื’ื ืžื—ื•ืฅ ืœืคื•ื ืงืฆื™ื” ื•ื”ืคื™ื ื•ืง ื”ื›ื™ ื’ื“ื•ืœ ืฉืœ ES13 (ื”ื™ื“ื•ืขื” ื’ื ื‘ืชื•ืจ ES2022) ื”ื•ื ื”ื™ื›ื•ืœืช ืœื›ืชื•ื‘ await ืžื—ื•ืฅ ืœื›ืœ ืคื•ื ืงืฆื™ื”. ืืช ื–ื” ื‘ื˜ื•ื— ืจืื™ืชื ื‘ dev tools ื•ืžืกืชื‘ืจ ืฉืืคืฉืจ ืœื›ืชื•ื‘ ืื•ืชื• ื‘ื›ืœ ืžื•ื“ื•ืœ. ื–ื” ืื•ืžืจ ืฉืื ื™ืฉ ืœื›ื ืงื•ื‘ืฅ ืฉืชืœื•ื™ ื‘ืžื™ื“ืข ืžื‘ื—ื•ืฅ ื›ื“ื™ ืœื”ื™ื˜ืขืŸ ืืชื ื›ื‘ืจ ืœื ืฆืจื™ื›ื™ื ืœื”ื’ื“ื™ืจ ืคื•ื ืงืฆื™ื™ืช main ืืกื™ื ื›ืจื•ื ื™ืช, ื•ืืคืฉืจ ืคืฉื•ื˜ ืœื›ืชื•ื‘:
const response = await fetch('/theme');
const theme = await response.json();

document.body.backgroundColor = theme.background;

ToCode
1 420
# ื•ืื– ื”ื ื”ืฆื™ืขื• "ื‘ื•ืื• ื ื—ืœื™ืฃ ืืช ื” Backend" ื‘ื“ืจืš ื›ืœืœ ื›ืฉื—ื•ืฉื‘ื™ื ืขืœ ืงื•ื“ "ืงืจื™ื" ืื ื—ื ื• ื—ื•ืฉื‘ื™ื ืขืœ ืงื•ื“ ืฉืžื™ ืฉืงื•ืจื ืื•ืชื• ื™ื›ื•ืœ ืœื”ื‘ื™ืŸ ืžื” ื”ื•ื ืขื•ืฉื” ื™ื—ืกื™ืช ื‘ืงืœื•ืช, ื•ืขืœ ืงื•ื“ ืœื ืงืจื™ื ื‘ืชื•ืจ ืงื•ื“ ืฉืฆืจื™ืš ืžืื•ื“ ืœื”ืชืืžืฅ ื›ื“ื™ ืœื”ื‘ื™ืŸ ืžื” ืงื•ืจื” ื‘ื•. ื›ืฉืžืกืชื›ืœื™ื ืขืœ ืคื•ื ืงืฆื™ื” ื‘ื•ื“ื“ืช ืงืœ ืœืจืื•ืช ืื™ื–ื” ื“ื‘ืจื™ื ื”ื•ืคื›ื™ื ืงื•ื“ ืœืœื ืงืจื™ื ืœืžืฉืœ ื›ืฉื”ืคื•ื ืงืฆื™ื” ืืจื•ื›ื” ืžื“ื™, ื›ื•ืœืœืช ื”ืžื•ืŸ ืชื ืื™ื ื•ืฉืžื•ืช ื”ืžืฉืชื ื™ื ื”ื ืคืฉื•ื˜ ืจืฆืฃ ืืงืจืื™ ืฉืœ ืื•ืชื™ื•ืช. ื‘ืžืขืจื›ืช ื’ื“ื•ืœื” ื›ื‘ืจ ื”ืจื‘ื” ื™ื•ืชืจ ืงืฉื” ืœื—ืฉื•ื‘ ืขืœ ืงื•ื“ ืงืจื™ื ื“ืจืš ื”ื™ื›ื•ืœืช "ืœืงืจื•ื" ืื•ืชื•, ืคืฉื•ื˜ ื›ื™ ื™ืฉ ื™ื•ืชืจ ืžื“ื™ ืžืžื ื•. ื•ื›ื›ืœ ืฉื™ืฉ ื™ื•ืชืจ ืงื•ื“ ื›ื›ื” ื™ื”ื™ื” ื™ื•ืชืจ ืงืฉื” ืœื”ื‘ื™ืŸ ืžื” ื›ืœ ื—ืœืง ืขื•ืฉื” ื•ื‘ืžื” ื”ื•ื ืชืœื•ื™. ื“ืจืš ื ื•ืกืคืช ืœื“ื‘ืจ ืขืœ ืงื•ื“ ืงืจื™ื ืฉืื•ืœื™ ื™ื•ืชืจ ืžืชืื™ืžื” ืœืžืขืจื›ื•ืช ื’ื“ื•ืœื•ืช ืชื”ื™ื” ืœื‘ื“ื•ืง ื›ืžื” ืžืกื•ื‘ืš ืœืขื ื•ืช ืขืœ ืฉืืœื” ืกืคืฆื™ืคื™ืช ืœื’ื‘ื™ ื”ืงื•ื“, ื•ืื– ืœื”ื›ื™ืŸ ืœืขืฆืžื ื• ืจืฉื™ืžื” ืฉืœ ืฉืืœื•ืช ืฉื—ืฉื•ื‘ ืœื ื• ืฉื™ื”ื™ื” ืงืœ ืœืขื ื•ืช ืขืœื™ื”ืŸ. ื‘ื ื™ื’ื•ื“ ืœ"ื›ืžื” ื”ืงื•ื“ ืžื•ื‘ืŸ", ื›ืฉื™ืฉ ืœื ื• ืฉืืœื” ืกืคืฆื™ืคื™ืช ื‘ืจืืฉ ื”ืงืจื™ื˜ืจื™ื•ืŸ ื”ื•ืคืš ืœื™ื•ืชืจ ืงืฉื™ื—. ื‘ืฉื‘ื™ืœ ื”ื“ื•ื’ืžื” ื ื“ืžื™ื™ืŸ Service ืฉื›ืชื•ื‘ ื‘ืจื™ืืงื˜ ื•ืžืชื—ื‘ืจ ืœืฉืจืช Backend, ืื‘ืœ ื’ื ืžืชื—ื‘ืจ ืœื›ืœ ืžื™ื ื™ APIs ื‘ืจืฉืช. ื‘ืงื•ื“ ื™ืฉ ื›ืžื” ืžืื•ืช ืงื•ืžืคื•ื ื ื˜ื•ืช, ื—ืœืงืŸ ืœื•ืงื—ื•ืช ืžื™ื“ืข ืžื” Backend ื“ืจืš SWR, ื—ืœืงืŸ ืžืขื“ื›ื ื•ืช ืžื™ื“ืข ื‘ืืžืฆืขื•ืช fetch ื•ืงื•ืžืคื•ื ื ื˜ื•ืช ืื—ืจื•ืช ืžืฉืชืžืฉื•ืช ื‘ืžืžืฉืงื™ื ื™ื™ืขื•ื“ื™ื™ื ืฉืœ APIs ื—ื™ืฆื•ื ื™ื™ื ื›ื“ื™ ืœืชืงืฉืจ ืขื ืื•ืชื APIs. ื•ืขื›ืฉื™ื• ื ืฉืืœ "ืื™ืคื” ืื ื™ ืžื•ืฆื ืจืฉื™ืžื” ืฉืœ ื›ืœ ื‘ืงืฉื•ืช ื”ืจืฉืช ืฉื” Service ืฉืœื™ ืžืกื•ื’ืœ ืœื”ื•ืฆื™ื?" ื‘ืžืงืจื” ื”ื˜ื•ื‘ ืื ื”ืงื•ื“ ืงืจื™ื ื‘ื™ื—ืก ืœืฉืืœื” ื”ื–ืืช ื™ื”ื™ื” ืœื ื• ื‘ืžืขืจื›ืช ืงื•ื‘ืฅ ืื—ื“ ืฉืžื˜ืคืœ ื‘ื›ืœ ื”ื‘ืงืฉื•ืช ืฉื™ื•ืฆืื•ืช ืžื”ื™ื™ืฉื•ื ื•ืžื”ื•ื•ื” "ื ืงื•ื“ืช ื™ืฆื™ืื”" ืœื›ืœ Backend ืื• API. ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ืชืžื™ื“ ื™ืขื‘ืจื• ื“ืจืš ื ืงื•ื“ืช ื™ืฆื™ืื” ื–ื• ื•ื›ืš ื‘ืฉื‘ื™ืœ ืœืขื ื•ืช ืขืœ ื”ืฉืืœื” ืฆืจื™ืš ืจืง ืœืคืชื•ื— ืืช ื”ืงื•ื‘ืฅ. ื‘ืžืงืจื” ื”ืคื—ื•ืช ื˜ื•ื‘ ื›ืœ ืงื•ืžืคื•ื ื ื˜ื” ืชืงืจื ื‘ื“ืจืš ืฉืœื” ืœ API ืื• ื” Backend ืฉื”ื™ื ืขื•ื‘ื“ืช ืžื•ืœื•, ื•ื ืฆื˜ืจืš ืœืขื‘ื•ืจ ืขืœ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ืื—ืช ืื—ืช ื›ื“ื™ ืœืืกื•ืฃ ืืช ื›ืœ ื”ืงืจื™ืื•ืช. ืงืฉื” ืžืื•ื“ ืœื›ืชื•ื‘ ืงื•ื“ ืฉื™ื”ื™ื” ืงืจื™ื ื‘ื™ื—ืก ืœื›ืœ ืฉืืœื”, ืื‘ืœ ืœืื•ืจืš ื–ืžืŸ ื›ื›ืœ ืฉื ืืกื•ืฃ ื™ื•ืชืจ ืฉืืœื•ืช ืฉืžืขื ื™ื™ื ื•ืช ืื•ืชื ื• ื ื•ื›ืœ ืœื›ื•ื•ืŸ ืืช ื”ืงื•ื“ ืฉืœื ื• ื›ื“ื™ ืฉื™ื”ื™ื” ืงืจื™ื ื‘ื™ื—ืก ืœืื•ืชืŸ ืฉืืœื•ืช, ื•ื›ืš ืœืฉืคืจ ืืช ืื™ื›ื•ืช ื”ืžืขืจื›ืช ื•ืžื”ื™ืจื•ืช ื”ืคื™ืชื•ื—.

ToCode
1 420
<input type="submit" name="commit" value="send" data-disable-with="send" />
</form>
</template></turbo-stream>
ืงื•ื“ JavaScript ืžืชื•ืš ื”ืกืคืจื™ื” Turbo ื™ืคืขื ื— ืืช ื”ืชืฉื•ื‘ื” ื•ื™ืขื“ื›ืŸ ืื•ื˜ื•ืžื˜ื™ืช ืืช ื”ืขืžื•ื“. ื‘ืœื™ ื˜ืขื™ื ื” ืžื—ื“ืฉ ื•ื‘ืœื™ ื”ืคื ื™ื” ืœืžืงื•ืžื•ืช ืื—ืจื™ื, ืžืžืฉ ื›ืžื• ืฉื”ื™ื” ืงื•ืจื” ืขื ื›ืœ ืคืจื™ื™ืžื•ื•ืจืง ืฆื“ ืœืงื•ื—. ## ืฉื™ืชื•ืฃ ื”ื”ื•ื“ืขื•ืช ืขื ื’ื•ืœืฉื™ื ืื—ืจื™ื ื‘ื–ืžืŸ ืืžืช ื•ื›ืžื•ื‘ืŸ ื”ืฉืœื‘ ื”ื›ื™ ืžื“ืœื™ืง ื‘ืขืžื•ื“ ื”ื•ื ื”ืฉื™ืชื•ืฃ ื‘ื–ืžืŸ ืืžืช ื‘ืืžืฆืขื•ืช Web Sockets: ื‘ืžืงื•ื ืœืฉืœื•ื— ืืช ื”ื•ืจืืช ื”ืขื“ื›ื•ืŸ "ื‘ืชื’ื•ื‘ื”" ืœื’ื•ืœืฉ ืฉื™ืฆืจ ื”ื•ื“ืขื” ื—ื“ืฉื”, ืื ื™ ื™ื›ื•ืœ ืœืฉืœื•ื— ืืช ืื•ืชื” ื”ื•ืจืืช ืขื“ื›ื•ืŸ ื“ืจืš Socket, ืคืฉื•ื˜ ื›ื™ ืžืฉื”ื• ื‘ืฉืจืช ื”ืฉืชื ื”. ื‘ืฆื•ืจื” ื›ื–ืืช ื›ืœ ื”ื’ื•ืœืฉื™ื ื™ืงื‘ืœื• ืืช ื”ื”ื•ื“ืขื” ื”ื—ื“ืฉื” ื‘ืœื™ ืฉื™ืฆื˜ืจื›ื• ืœืจืขื ืŸ ืืช ื”ืขืžื•ื“. ื”ืงื•ื“ ืœืฉืœื‘ ื”ืฉืœื™ืฉื™ ื ืžืฆื ื›ืืŸ: ืฉืœื‘ 3 ื•ื‘ืขื™ืงืจื•ืŸ ื”ื•ื ืžื•ืจื›ื‘ ื‘ืกืš ื”ื›ืœ ืžืฉื ื™ ืฉื™ื ื•ื™ื™ื. ื‘ืžื•ื“ืœ app/models/message.rb ื”ื•ืกืคืชื™ ืืช ื”ืฉื•ืจื”:
class Message < ApplicationRecord
  after_create_commit { broadcast_append_to('messages') }
end
ืฉืžืคืขื™ืœื” ืคืงื•ื“ืช ืฉื™ื“ื•ืจ ืื—ืจื™ ื›ืœ ื™ืฆื™ืจืช ื”ื•ื“ืขื”. ื‘ Controller ืžื—ืงืชื™ ืืช ื”ื”ื•ืจืื” ืœื™ืฆื•ืจ ื”ื•ื“ืขื” ื—ื“ืฉื”, ื›ื™ ื”ื™ื ืชื’ื™ืข ืžื” Broadcast:
  def create
    @message = Message.new(message_params)
    respond_to do |format|
      if @message.save
        format.html { redirect_to messages_path }
        format.turbo_stream do
          render turbo_stream: [
            turbo_stream.replace('new_message', partial: 'new_message_form')
          ]
        end
      else
        format.html { render :index, status: :unprocessable_entity }
      end
    end
  end
ื•ื‘ื˜ืžืคืœื™ื™ื˜ ื”ื•ืกืคืชื™ ืืช ื”ืคืงื•ื“ื”:
<%= turbo_stream_from "messages" %>
ืœืงื•ื‘ืฅ app/views/messages/index.html.erb. ืฉื™ืžื• ืœื‘ ืฉื”ืžื™ืœื” messages ืฉื ื–ื”ื” ืœืคืจืžื˜ืจ ืฉื”ืขื‘ืจืชื™ ืœ broadcast_append_to ืฉื”ื™ื” ื‘ืžื•ื“ืœ. ื”ืชื•ืฆืื” - ื›ืœ ืžืฉืชืžืฉ ื™ื›ื•ืœ ืœืฉืœื•ื— ื”ื•ื“ืขื” ืœืฉืจืช, ื”ื”ื•ื“ืขื” ื’ื ืชื™ื›ื ืก ืœื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื•ื’ื ืชื™ืฉืœื— ื‘ Web Socket ืœื›ืœ ื”ื’ื•ืœืฉื™ื ื”ืื—ืจื™ื ื‘ืืชืจ. ื•ื›ืœ ื–ื” ื‘ืœื™ ืœื›ืชื•ื‘ ืฉื•ืจืช JavaScript ืื—ืช. ## ืžื” ื”ืœืื” ื”ื“ื•ื’ืžื” ืฉื”ื•ืฆื’ื” ื›ืืŸ ืžืื•ื“ ืคืฉื˜ื ื™ืช - ื‘ืขื•ืœื ื”ืืžื™ืชื™ ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœื ื”ืœ ืžืฉืชืžืฉื™ื, ืงื‘ื•ืฆื•ืช ื•ืœืฉืœื•ื— ืขื“ื›ื•ื ื™ื ืจืง ืœืื ืฉื™ื ืฉื”ืขื“ื›ื•ืŸ ื‘ืืžืช ืจืœื•ื•ื ื˜ื™ ืขื‘ื•ืจื. ืชืฉืžื—ื• ืœืฉืžื•ืข ืฉื‘ืจื™ื™ืœืก ื™ืฉ ืืช ื›ืœ ื”ื›ืœื™ื ืœืขืฉื•ืช ืืช ื–ื”, ื›ื•ืœืœ ื ื™ื”ื•ืœ ื”ืจืฉืื•ืช ื‘ืจื™ืฉื•ื ืœืขื“ื›ื•ื ื™ื ื•ื”ื›ืœ ื‘ืชื•ืš ื”ื›ืœื™ื ืฉืœ ืจื™ื™ืœืก. ื˜ื•ืจื‘ื• Streams, ืฉื–ื” ื”ื—ืœืง ืฉืžืงื‘ืœ ื”ื•ืจืื•ืช ืžื”ืฉืจืช ื•ืžืขื“ื›ืŸ ืืช ื”ืขืžื•ื“ ืชื•ืžืš ื‘ืžืกืคืจ ืคืขื•ืœื•ืช ืžื•ื‘ื ื•ืช ืขื‘ื•ืจ ื”ื•ืกืคื” ื•ืžื—ื™ืงื” ื‘ื›ืœ ืžื™ื ื™ ืžืงื•ืžื•ืช (ื”ื•ืกืคื” ืœืกื•ืฃ, ื”ื•ืกืคื” ืœื”ืชื—ืœื” ื•ื“ื‘ืจื™ื ื›ืืœื”), ื•ื’ื ืžืืคืฉืจ ืœื›ื ืœื›ืชื•ื‘ ืงื•ื“ JavaScript ื›ื“ื™ ืœืžืžืฉ ืคืขื•ืœื•ืช ื—ื“ืฉื•ืช ืžืฉืœื›ื, ื›ืš ืฉื’ื ื‘ืชื•ื›ื ื™ื•ืช ื’ื“ื•ืœื•ืช ื™ื•ืชืจ ื›ื ืจืื” ืฉืœื ืชื™ืชืงืขื•. ื‘ืฆื“ ื”ืฉืœื™ืœื™ ื•ื›ืžื• ืชืžื™ื“ ื‘ืคืจื™ื™ืžื•ื•ืจืงื™ื ืžื”ืกื•ื’ ื”ื–ื”, ื›ืฉื”ืฉืœื™ื˜ื” ืฉืœื›ื ืžื•ื’ื‘ืœืช ืœืคืขืžื™ื ืงืฉื” ื™ื•ืชืจ ืœืžืฆื•ื ื‘ืื’ื™ื ืื• ืœืžืžืฉ Use Cases ืžืชื•ื—ื›ืžื™ื ื™ื•ืชืจ, ืœืžืฉืœ ืœื ื‘ืจื•ืจ ืื™ืš ืœืžืžืฉ Optimistic Updates ืื• ืžืฆื‘ Offline ื›ืฉืฆืจื™ืš ืืช ื”ืฉืจืช ืœื›ืœ ืฉื™ื ื•ื™. ื‘ืฉื•ืจื” ื”ืชื—ืชื•ื ื” ืื ืืชื ื›ื‘ืจ ื‘ืจื™ื™ืœืก ื•ื”ืืคืœื™ืงืฆื™ื” ืฉืœื›ื ืœื ืžืื•ื“ ืžืชื•ื—ื›ืžืช ืฉื™ืœื•ื‘ ื˜ื›ื ื•ืœื•ื’ื™ื” ื›ืžื• Turbo Streams ื™ืขื–ื•ืจ ืœื›ื ืœื”ื™ืฉืืจ ื‘ืจื™ื™ืœืก ื‘ืœื™ ืœืฉื›ืชื‘ ืืช ื”ื›ืœ ืœืคืจื™ื™ืžื•ื•ืจืง ืฆื“-ืœืงื•ื—.

ToCode
1 420
# ื‘ื•ืื• ื ื‘ื ื” ืœื•ื— ืžื•ื“ืขื•ืช ื‘ Rails ื‘ืœื™ JavaScript ืื—ืช ื”ื“ื•ื’ืžืื•ืช ื”ืจืืฉื•ื ื•ืช ืฉืื ื™ ืžืจืื” ืœ Web Sockets ื”ื™ื ื‘ื ื™ื” ืฉืœ ืœื•ื— ืžื•ื“ืขื•ืช ืžืฉื•ืชืฃ ืœื›ืžื” ื’ื•ืœืฉื™ื - ื›ืœ ืคืขื ืฉื’ื•ืœืฉ ืื—ื“ ืฉื•ืœื— ื”ื•ื“ืขื”, ื”ื”ื•ื“ืขื” ืžื™ื“ ืžื•ืคื™ืขื” ืขืœ ื”ืžืกืš ืฉืœ ื›ืœ ื”ืื—ืจื™ื. ื•ื”ื™ื•ื ื ื ืกื” ืœื‘ื ื•ืช ืืช ืื•ืชื• ืœื•ื— ืžื•ื“ืขื•ืช ื‘ืœื™ ืœื›ืชื•ื‘ ืฉื•ืจื” ืฉืœ JavaScript, ืจืง ื‘ืืžืฆืขื•ืช ื”ืžื ื’ื ื•ื ื™ื ื”ืžื•ื‘ื ื™ื ื‘ Rails. ## ืฉืœื‘ 1 - ืœื•ื— ืžื•ื“ืขื•ืช ื”ืฉืœื‘ ื”ืจืืฉื•ืŸ ื‘ื“ืจืš ืœืœื•ื— ืžื•ื“ืขื•ืช ืžืฉื•ืชืฃ ื”ื•ื ื‘ื ื™ื™ืช ืœื•ื— ืžื•ื“ืขื•ืช. ื•ื›ืŸ ื”ื•ื ื™ื”ื™ื” ืžืฉื•ืชืฃ ื›ื™ ื™ืฉ ืœื ื• ืฆื“ ืฉืจืช, ืื‘ืœ ืขื“ื™ื™ืŸ ืœื ื‘ื–ืžืŸ ืืžืช. ื”ืงื•ื“ ืœืฉืœื‘ ื”ื–ื” ื ืžืฆื ื›ืืŸ: ืœื•ื— ืžื•ื“ืขื•ืช ืฉืœื‘ 1 ื‘ื ื™ืชื™ ืžื•ื“ืœ ื‘ืฉื‘ื™ืœ ื”ื•ื“ืขื” ื•ืงื•ื ื˜ืจื•ืœืจ ืขื ื”ืงื•ื“ ื”ื‘ื:
class MessagesController < ApplicationController
  def index
    @messages = Message.all
    @message = Message.new
  end

  def create
    @message = Message.new(message_params)
    @message.save!

    redirect_to messages_path
  end

  def message_params
    params.require(:message).permit(:text)
  end
end
ื”ืคื•ื ืงืฆื™ื” ื”ื™ื—ื™ื“ื” ื›ืืŸ ืฉืžื™ื™ืฆืจืช HTML ื”ื™ื index, ืฉืื—ืจืื™ืช ืขืœ ื”ืฆื’ืช ื›ืœ ื”ื”ื•ื“ืขื•ืช ื•ื’ื ืžืฆื™ื’ื” ื˜ื•ืคืก ืœื™ืฆื™ืจืช ื”ื•ื“ืขื” ื—ื“ืฉื”. ื”ืงื•ื“ ืฉืœ ื”ืชื‘ื ื™ืช ืžื—ื•ืœืง ืœืฉื ื™ ืงื‘ืฆื™ื, ื”ืงื•ื‘ืฅ ื”ืจืืฉื•ืŸ ื”ื•ื app/views/messages/index.html.erb ื•ื–ื” ื”ืงื•ื“ ืฉืœื•:
<h1>Messages#index</h1>
<%= render partial: 'message', collection: @messages %>

<%= form_for @message, url: messages_path, method: :POST do |f| %>
  <%= f.label :text %>
  <%= f.text_field :text %>
  <%= f.submit :send %>
<% end %>
ื•ื”ืงื•ื‘ืฅ ื”ืฉื ื™ ื”ื•ื ื” HTML ืฉืœ ื›ืœ ื”ื•ื“ืขื” ื‘ืงื•ื‘ืฅ app/views/messages/_message.html.erb:
<p><%= message.text %></p>
<hr />
ื ืฉื™ื ืœื‘ ื›ื‘ืจ ืฉื‘ืœื™ ืฉื•ื JavaScript Framework ืื• ืฉื•ื ื“ื‘ืจ ืื ื™ ืžืงื‘ืœ ื‘ืงืœื•ืช ื”ืคืจื“ื” ืฉื‘ื” ื›ืœ ื—ืœืง ื‘ืขืžื•ื“ ื›ืชื•ื‘ ื‘ืงื•ื‘ืฅ ื ืคืจื“, ื•ื—ืœืง ืื—ื“ - ืจืฉื™ืžืช ื”ื”ื•ื“ืขื•ืช - ืžืฉืชืžืฉ ื‘ื—ืœืง ื”ืฉื ื™ - ื“ืฃ ื”ื”ื•ื“ืขื”. ืื ืชืคืขื™ืœื• ืืช ื”ืงื•ื“ ืชื•ื›ืœื• ืœื’ืœื•ืฉ ืžืงื•ืžื™ืช ืœื ืชื™ื‘:
http://localhost:3000/messages
ืœืจืื•ืช ืจืฉื™ืžื” ืฉืœ ืฉืชื™ ื”ื•ื“ืขื•ืช ืžื•ื‘ื ื•ืช ื•ื˜ื•ืคืก ืฉื™ื•ืฆืจ ื”ื•ื“ืขื•ืช ื—ื“ืฉื•ืช. ื”ื˜ื•ืคืก ืžื’ื™ืข ืœืคื•ื ืงืฆื™ื” create ื‘ controller ืฉืชืฉืžื•ืจ ืืช ื”ื”ื•ื“ืขื” ื”ื—ื“ืฉื” ื•ืชืฉืœื— Redirect ืœื ืชื™ื‘ ืจืฉื™ืžืช ื”ื”ื•ื“ืขื•ืช, ืฉื ื”ื’ื•ืœืฉ ื™ืจืื” ืืช ื›ืœ ื”ื”ื•ื“ืขื•ืช ื•ืืช ื”ื”ื•ื“ืขื” ื”ื—ื“ืฉื” ืฉืœื•. ## ืฉื™ืคื•ืจ ื‘ื™ืฆื•ืขื™ื - ื“ื™ืœื•ื’ ืขืœ ื” Redirect ืฉืœื‘ ืฉื ื™ ื‘ื“ืจืš ืœื™ืฆื™ืจืช ื”ืœื•ื— ื”ืฉื™ืชื•ืคื™ ื”ื•ื ืฉื™ืคื•ืจ ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” - ื‘ืžืงื•ื ืœืขื ื•ืช ืœื’ื•ืœืฉ ืขื ื”ื•ื“ืขืช Redirect, ืื ื—ื ื• ื ืฉืœื— ื”ื•ื“ืขืช Turbo Stream ืฉื–ื” ื‘ืขืฆื ื‘ืงืฉื” ืœืขื“ื›ื•ืŸ ื”ืขืžื•ื“ ืœืคื™ ื›ืœืœื™ื ืžืกื•ื™ืžื™ื. ื‘ืžืงืจื” ืฉืœื ื• ื™ื”ื™ื• ืฉืชื™ ื”ื•ื“ืขื•ืช: 1. ื‘ืงืฉื” ืœื”ื•ืกื™ืฃ ืืช ื”ื”ื•ื“ืขื” ื”ื—ื“ืฉื” ืœืจืฉื™ืžืช ื”ื”ื•ื“ืขื•ืช. 2. ื‘ืงืฉื” ืœื ืงื•ืช ืืช ื”ื˜ืงืกื˜ ื‘ื˜ื•ืคืก. ื”ืงื•ื“ ืœืฉืœื‘ ื”ื–ื” ื ืžืฆื ื›ืืŸ: ืฉืœื‘ 2 ื‘ืฉื‘ื™ืœ ืœืฉืœื•ื— ืืช ื”ื”ื•ื“ืขื•ืช ืœื’ื•ืœืฉ ื›ืชื‘ืชื™ ืืช ื”ืงื•ื“ ื”ื‘ื ื‘ืคื•ื ืงืฆื™ื” create:
def create
  @message = Message.new(message_params)
  respond_to do |format|
    if @message.save
      format.html { redirect_to messages_path }
      format.turbo_stream do
        render turbo_stream: [
          turbo_stream.append('messages', partial: 'message', locals: { message: @message }),
          turbo_stream.replace('new_message', partial: 'new_message_form')
        ]
      end
    else
      format.html { render :index, status: :unprocessable_entity }
    end
  end
end
ื•ื–ื” ื”ื›ืœ - ื‘ืขืฆื ืฉืชื™ ื”ืฉื•ืจื•ืช:
turbo_stream.append('messages', partial: 'message', locals: { message: @message }),
turbo_stream.replace('new_message', partial: 'new_message_form')
ื”ืŸ ื”ื”ื•ืจืื•ืช ืœืขืžื•ื“ ืœืขื“ื›ืŸ ืืช ื” HTML ืœืคื™ ื”ืคืจื˜ื™ื ื”ื—ื“ืฉื™ื. ื›ืฉื”ื“ืคื“ืคืŸ ื™ืงื‘ืœ ืืช ื”ืชืฉื•ื‘ื” ืžื” POST, ืฉื ืจืื™ืช ื›ื›ื”:
<turbo-stream action="append" target="messages"><template><p>new text</p>
<hr />
</template></turbo-stream><turbo-stream action="replace" target="new_message"><template><form class="new_message" id="new_message" action="/messages" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="Z4ROwg-7zOPU38BqhifwH3AdWu6NZ8f-Oy-xoPV_ZClJxs0FjpwmjtYeG3Pcd2QyasuRhrGRi9QEP1I27gb0DA" autocomplete="off" />
  <label for="message_text">Text</label>
  <input type="text" name="message[text]" id="message_text" />

ToCode
1 420
# ืžืขืงืคื™ื ืžื” ืงื•ืจื” ื›ืฉื™ืฉ ื‘ืื’ ื‘ืžืขืจื›ืช ืฉืืชื” ืœื ืžืฆืœื™ื— ืœืžืฆื•ื? ื ื›ื•ืŸ, ื›ื•ืชื‘ื™ื ืžืขืงืฃ. ืžืขืงืฃ ื”ื•ื ืžื ื’ื ื•ืŸ ืฉื‘ื’ื“ื•ืœ ืื•ืžืจ "ืื™ืŸ ืœื™ ืžื•ืฉื’ ืœืžื” ื”ื’ืขื ื• ืœื›ืืŸ, ืื‘ืœ ืื ื›ื‘ืจ ืืชื” ื›ืืŸ ืื– ืขื“ื™ืฃ ืฉืชืคื ื” ื™ืžื™ื ื”". ืื ื—ื ื• ืžื’ื™ืขื™ื ืœืžืขืงืคื™ื ื“ืจืš ื”ืชืจืกืงื•ื™ื•ืช ืื• ื‘ืื’ื™ื - ืคื•ื ืงืฆื™ื” ืืžื•ืจื” ืœืงื‘ืœ ืžืกืคืจ ื•ืคืชืื•ื ืžื•ืคืขืœืช ืขื ืžื—ืจื•ื–ืช ื•ืœื›ืŸ ืžืชืจืกืงืช. ืื—ืจื™ ืฉืœื ื”ืฆืœื—ืช ืœืžืฆื•ื ืฉื•ื ื ืชื™ื‘ ื‘ืงื•ื“ ืฉื’ื•ืจื ืœืคื•ื ืงืฆื™ื” ืœืงื‘ืœ ืžื—ืจื•ื–ืช ื”ืฆืขื“ ื”ื‘ื ื”ื•ื ืœืขื“ื›ืŸ ืืช ืงื•ื“ ื”ืคื•ื ืงืฆื™ื” ืœื˜ืคืœ ื’ื ื‘ืžื—ืจื•ื–ื•ืช, ืœืžืฉืœ:
function isInCanvas(x, y) {
    if (typeof x === 'string') {
        x = Number(x);
    }
    if (typeof y === 'string') {
        y = Number(y);
    }
    
    // check if (x,y) is in the canvas
}
ื•ื›ืŸ ื™ืฉ ืฉืชื™ ื‘ืขื™ื•ืช ืขื ืžืขืงืคื™ื: 1. ื”ื ืžืงืฉื™ื ืขืœ ืงืจื™ืืช ื”ืงื•ื“ - ื™ื•ื ืื—ื“ ื‘ืขื•ื“ ื—ื•ื“ืฉื™ื™ื (ืื• ืฉื‘ื•ืขื™ื™ื) ื›ืฉืžื™ืฉื”ื• ื™ื’ื™ืข ืœื”ืกืชื›ืœ ืขืœ ื”ืคื•ื ืงืฆื™ื” ื”ื•ื ืœื ื™ื‘ื™ืŸ ืœืžื” ื”ื™ื ืฆืจื™ื›ื” ืœื”ืชืžื•ื“ื“ ื’ื ืขื ืžื—ืจื•ื–ื•ืช. 2. ื”ื ืžืชืจื‘ื™ื ื•ื™ื•ืฆืจื™ื ืชืจื‘ื•ืช ืฉืœ ืžืขืงืคื™ื - ืœืื•ืจืš ื–ืžืŸ ืžื ื”ืœื™ื ื•ืžืชื›ื ืชื™ื ืžืชืžื›ืจื™ื ืœืจืขื™ื•ืŸ ื”ืžืขืงืคื™ื ื•ืžื•ืกื™ืคื™ื ืžืขืงืฃ ื‘ืžืงื•ื ืœื”ืฉืงื™ืข ืืช ื”ื–ืžืŸ ื‘ื—ื™ืคื•ืฉ ื”ื‘ืื’ ื”ืืžื™ืชื™, ืžื” ืฉืจืง ืžื—ืžื™ืจ ืืช ื”ื‘ืขื™ื” ื›ื™ ืื•ืชื• ื‘ืื’ ื™ื›ื•ืœ ืœื”ืฉืคื™ืข ืขืœ ืขื•ื“ ืžืงื•ืžื•ืช ื‘ืžืขืจื›ืช, ื•ืื– ื’ื ื‘ื”ื ื ืฆื˜ืจืš ืœื”ื•ืกื™ืฃ ืžืขืงืคื™ื. ื”ื—ื™ื™ื ื–ื” ืœื ืกืคืจ ืœื™ืžื•ื“ ื•ื‘ืจื•ืจ ืฉื‘ืžืขืจื›ืช ืืžื™ืชื™ืช ืชืฆื˜ืจื›ื• ืœื”ื›ื ื™ืก ื™ื•ืชืจ ืžืžืขืงืฃ ืื—ื“. ื›ื“ืื™ ื›ืฉืืชื ืขื•ืฉื™ื ืืช ื–ื” ืœื”ื™ื•ืช ื‘ืจื•ืจื™ื, ืœื”ื•ืกื™ืฃ ื”ืขืจื” ื‘ืงื•ื“ ืฉืžืกื‘ื™ืจื” ืžื” ืžืฆื‘ ื”ืžืขืงืฃ ื•ืžื” ืžืฆืืชื ืขื“ ืขื›ืฉื™ื• ื•ื”ืจืฆื™ื ื™ื™ื ื‘ืืžืช ื’ื ื™ื•ืกื™ืคื• ืœ Backlog ื‘ Jira ืžืฉื™ืžื” ื—ื“ืฉื” ืœื”ืกื™ืจ ืืช ื”ืžืขืงืฃ, ื›ืฉื™ื”ื™ื” ื–ืžืŸ ื›ืžื•ื‘ืŸ.

ToCode
1 420
# ืคื™ืฆ'ืจ ื—ืฉื•ื‘ ืื‘ืœ ืœื ื‘ืฉื‘ื™ืœื™ ืื ืืช ืขื•ื‘ื“ืช ืขื React ื•ืœื ื™ื•ื“ืขืช ืื™ืš ืœื›ืชื•ื‘ Custom Hook ืฉื•ื•ื” ืœืขืฆื•ืจ ืขื›ืฉื™ื• ื•ืœืœืžื•ื“ ืืช ื–ื”, ืžืื—ืจ ื• Custom Hook ื”ื•ื ืื—ื“ ื”ืžื ื’ื ื•ื ื™ื ื”ื‘ืกื™ืกื™ื™ื ืฉืœ ืฉื™ืชื•ืฃ ืงื•ื“ ื‘ื™ืŸ ืงื•ืžืคื•ื ื ื˜ื•ืช, ื•ื‘ื›ืœ ืคืจื•ื™ืงื˜ ืจื™ืืงื˜ ืžื’ื™ืข ื”ืจื’ืข ืฉืžื™ืฉื”ื• ื™ื›ืชื•ื‘ ืื—ื“. ืื‘ืœ ืื ื‘ืื•ืชื• React ืืช ืœื ื™ื•ื“ืขืช ืžื” ื–ื” Server Side Rendering ืื• ืœืžื” ืœื”ืฉืชืžืฉ ื‘ useDeferredValue, ืœื ืงืจื” ื›ืœื•ื. ื–ื” ืื•ืœื™ ื™ื”ื™ื” ืžื›ืฉื•ืœ ื‘ืจืื™ื•ื ื•ืช ืขื‘ื•ื“ื” ืื‘ืœ ื‘ื—ื™ื™ื ื”ืืžื™ืชื™ื™ื ื™ืฉ ื”ืจื‘ื” ืคืจื•ื™ืงื˜ื™ื ืฉืœื ืฆืจื™ื›ื™ื ืืช ื”ืคื™ืฆ'ืจื™ื ื”ืืœื”, ื•ื™ื•ืชืจ ืžื–ื” - ื™ืฉ ื”ืจื‘ื” ืคืจื•ื™ืงื˜ื™ื ื‘ื”ื ื‘ื’ืœืœ ืฉื™ื ืกื• ืœื”ื˜ืžื™ืข ืืช ื”ืคื™ืฆ'ืจื™ื ื”ืืœื” ื”ืคืจื•ื™ืงื˜ ืจืง ื™ื”ืคื•ืš ืœื™ื•ืชืจ ืงืฉื” ืœืชื—ื–ื•ืงื”. ื”ื™ื™ืชื™ ืฉืžื— ืื ื‘ืชื™ืขื•ื“ ืฉืœ ืกืคืจื™ื” ื”ื™ื™ื ื• ืจื•ืื™ื ืœื™ื“ ื›ืœ ืคื•ื ืงืฆื™ื” ืื™ื–ื” ื“ื™ืจื•ื’ ืฉืื•ืžืจ ื›ืžื” ื›ื“ืื™ ืœื”ืฉืชืžืฉ ื‘ื” - ืž"ืื ืืชื” ืœื ืžืฉืชืžืฉ ื‘ืžื ื’ื ื•ืŸ ื”ื–ื” ื”ืงื•ื“ ืฉืœืš ืฉื‘ื•ืจ" ืœ-"ืื ืืชื” ืžืฉืชืžืฉ ื‘ืžื ื’ื ื•ืŸ ื”ื–ื” ื”ืงื•ื“ ืฉืœืš ืฉื‘ื•ืจ". ืขื“ ืฉื–ื” ื™ืงืจื” ื”ืื—ืจื™ื•ืช ืขืœื™ื ื• ืœื”ืคืขื™ืœ ืฉื™ืงื•ืœ ื“ืขืช, ื•ื›ื“ืื™ ืœื–ื›ื•ืจ, ืจืง ื‘ื’ืœืœ ืฉื”ืคื™ืฆ'ืจ ืงื™ื™ื ืœื ืื•ืžืจ ืฉื”ื•ื ืจืœื•ื•ื ื˜ื™ (ืื• ืื™ ืคืขื ื™ื”ื™ื”) ืœืขื•ืœื ืฉืœื›ื.

ToCode
1 420
# ืืช ื”ื˜ืขื•ืช ื”ื–ืืช ืืคื™ืœื• TypeScript ืœื ื”ืฆืœื™ื— ืœืชืคื•ืก ื‘ื“ื™ื•ืง ื›ืฉื—ืฉื‘ืชื™ ืฉืžืฆืืชื™ ืืช ื”ืื•ืจ ื• TypeScript ื™ืชืงืŸ ืœื™ ืืช ื›ืœ ื”ื‘ืื’ื™ื ื™ื—ืกื™ื ื• ื”ื’ื™ืขื• ืœืžืฉื‘ืจ. ื”ื›ืœ ื”ืชื—ื™ืœ ื‘ืคื•ื ืงืฆื™ื” ืชืžื™ืžื” ืฉืœื•ืงื—ืช ืžื—ืจื•ื–ืช, ืžื—ืœื™ืคื” ื‘ืชื•ื›ื” ื›ืžื” ืกื™ืžื ื™ื ื•ืžื—ื–ื™ืจื” ืืช ื”ื˜ืงืกื˜ ื”ืžื•ื—ืœืฃ:
function replaceByDictionary(text: string, replacements: Record<string, string>) {
    let interpolatedText = text;

    for (const [key, value] of Object.entries(replacements)) {
        interpolatedText = interpolatedText.replace(key, value);
    }
}
ื‘ืœื™ ืœืฉื™ื ืœื‘ ืœื‘ืื’ ื”ืžืฉื›ืชื™ ืœื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื” ื›ื“ื™ ืœืฉืœื•ื— ืืช ื”ื˜ืงืกื˜ ื”ืžื•ื—ืœืฃ ืœืฉืจืช:
const replacedText = replaceByDictionary("I love TypeScript", { "I": "Everyone" });
await fetch(`https://tocode.requestcatcher.com/test?text=${replacedText}`, { method: 'POST' });
ืจืง ื›ื“ื™ ืœื”ื™ืฉืืจ ืขื ืœื‘ (ื•ืงื•ื“) ืฉื‘ื•ืจ ื›ืฉื’ื™ืœื™ืชื™ ืฉื”ื‘ืงืฉื” ืฉืชื›ืœ'ืก ื ืฉืœื—ื” ืœืฉืจืช ื”ื™ืชื” ืขื ื” URL:
POST /test?text=undefined
ืžื” ืงืจื” ื›ืืŸ? ืœืžื” ื˜ื™ื™ืคืกืงืจื™ืคื˜ ืคืกืคืก? ื”ืชืฉื•ื‘ื” ืคืฉื•ื˜ื” - ื”ืกืงืช ื˜ื™ืคื•ืกื™ื ืื•ื˜ื•ืžื˜ื™ืช ื’ืจืžื” ืœื˜ื™ื™ืคืกืงืจื™ืคื˜ ืœื”ื’ื“ื™ืจ ืืช replacedText ื‘ืชื•ืจ void, ื•ืื•ืคืจื˜ื•ืจ ื”ื’ืจืฉ ื”ื”ืคื•ืš ื™ื•ื“ืข ืœืงื‘ืœ ืžืฉืชื ื™ void ื‘ืชื•ืš ืžื—ืจื•ื–ื•ืช. ื—ื•ืงื™ ืœื’ืžืจื™, ื•ื‘ื›ืœืœ ืœื ืžื” ืฉื”ืชื›ื•ื•ื ืชื™. ื”ืคื™ืชืจื•ืŸ? ื›ืžื• ืชืžื™ื“ ื‘ืชื›ื ื•ืช ืื™ืŸ ืคื™ืชืจื•ื ื•ืช ืงืกื, ืื‘ืœ ื›ืŸ ื™ืฉ ืฉืชื™ ืืคืฉืจื•ื™ื•ืช ืžืจื›ื–ื™ื•ืช: ืืคืฉืจ ืœื”ื—ืœื™ื˜ ืฉืื ื—ื ื• ืœื ืื•ื”ื‘ื™ื ืืช ื”ืกืงืช ื”ื˜ื™ืคื•ืกื™ื ืฉืœ ื˜ื™ื™ืคืกืงืจื™ืคื˜, ื•ืžื’ื“ื™ืจื™ื ืืช replacedText ื‘ืชื•ืจ string ื‘ืขืฆืžื ื•. ื–ื” ืื•ืžืจ ืœื›ืชื•ื‘:
const replacedText: string = replaceByDictionary("I love TypeScript", { "I": "Everyone" });
ื•ืขืœ ื–ื” ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื›ื‘ืจ ื™ืฆืขืง. ืื• (ื•ืœื“ืขืชื™ ืขื“ื™ืฃ) ืœื”ื—ืœื™ื˜ ืœื”ื•ืฆื™ื ืœืคื•ื ืงืฆื™ื” ืืช ื”ืงื•ื“ ืฉืฉื•ืœื— ื˜ืงืกื˜ ืœืฉืจืช, ื•ืื– ื ืงื‘ืœ:
async function postText(text: string) {
    await fetch(`https://tocode.requestcatcher.com/test?text=${replacedText}`, { method: 'POST' });
}

const replacedText = replaceByDictionary("I love TypeScript", { "I": "Everyone" });
await postText(replacedText);
ื‘ื’ื™ืฉื” ื›ื–ืืช ืื ื—ื ื• ื’ื ืฉื•ืžืจื™ื ืขืœ ื”ื’ืžื™ืฉื•ืช ืœืฉื ื•ืช ืืช ืงื•ื“ ื”ืฉืœื™ื—ื” ืœืฉืจืช ื‘ืขืชื™ื“, ื’ื ืžืคืจื™ื“ื™ื ื‘ื™ืŸ ื”ืœื•ื’ื™ืงื” (ืœืขื“ื›ืŸ ืืช ื”ื˜ืงืกื˜) ืœื‘ื™ืŸ ืžื” ืขื•ืฉื™ื ืขื ื”ืชื•ืฆืื” (ืฉื•ืœื—ื™ื ืœืฉืจืช), ื•ื”ื›ื™ ื—ืฉื•ื‘, ืžืงื‘ืœื™ื ืžื˜ื™ื™ืคืกืงืจื™ืคื˜ ืืช ื”ื”ื’ื ื” ืฉืจืฆื™ื ื•.

ToCode
1 420
# ืฉื ื™ ืกื•ื’ื™ื ืฉืœ ืงื•ื“ ื ื›ื•ืŸ ื™ืฉ ืงื•ื“ ื ื›ื•ืŸ ื›ื™ ื”ื•ื ืžื›ื™ืœ ืืช ื”ืื‘ืกื˜ืจืงืฆื™ื” ื”ื ื›ื•ื ื”, ื›ื™ ื”ื•ื ืžื˜ืคืœ ื‘ื›ืœ ืžืงืจื™ ื”ืงืฆื”, ื›ื™ ื”ื•ื ืจืฅ ื‘ื‘ื™ืฆื•ืขื™ื ื˜ื•ื‘ื™ื ื•ืœื ื›ื•ืœืœ ื—ื•ืœืฉื•ืช ืื‘ื˜ื—ื”. ืื ื™ ืžืื•ื“ ืื•ื”ื‘ ืงื•ื“ ื ื›ื•ืŸ ืื‘ืœ ื”ืกื•ื’ ื”ื–ื” ืฉืœ ื ื›ื•ืŸ ื”ื•ื ืœื ืžืฉื”ื• ืฉืงืœ ืœื›ืชื•ื‘ ื‘ืคืขื ื”ืจืืฉื•ื ื”. ืจื•ื‘ ื”ืคืขืžื™ื ื”ื•ื ื“ื•ืจืฉ ื™ื•ืชืจ ืžื™ื“ืข ืขืœ ื”ืžืขืจื›ืช ืžืžื” ืฉื™ืฉ ืœื ื•, ื•ื™ื•ืชืจ ืžื ื™ืกื™ื•ืŸ ืื—ื“ ื‘ืฉื‘ื™ืœ ืœืงืœื•ืข. ืื‘ืœ ื™ืฉ ื’ื ืงื•ื“ ื ื›ื•ืŸ ื›ื™ ื”ื•ื ื›ืชื•ื‘ ืœืคื™ Best Practices. ืงื•ื“ ืฉื ื›ืชื‘ ื ื›ื•ืŸ ื‘ืคืขื ื”ืจืืฉื•ื ื” ื›ื™ ืœื ืžืฉื ื” ืžืชื™ ืื ื—ื ื• ื›ื•ืชื‘ื™ื ืื•ืชื•, ืœื›ืชื•ื‘ ืืช ื”ื’ื™ืจืกื” ื”ื ื›ื•ื ื” ืœื ื™ื•ืชืจ ืžืกื•ื‘ืš ืžืœื›ืชื•ื‘ ื’ื™ืจืกื” ืœื ื ื›ื•ื ื”. ืœื“ื•ื’ืžื” ืœื›ืชื•ื‘ ื‘ Dockerfile ืืช ื”ืฉื•ืจื”:
FROM postgres:15.1
ื‘ืžืงื•ื:
FROM postgres
ื›ื™ latest ืžืชื™ืฉื”ื• ื”ื•ืœืš ืœื”ืคื•ืš ืœืžืฉื”ื• ืื—ืจ ื•ืื ื™ ืœื ืจื•ืฆื” ืฉื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื™ืฉืชื“ืจื’ ืœื™ ืžืชื—ืช ืœืจื’ืœื™ื™ื. ืื• ื‘ JavaScript ื ืขื“ื™ืฃ ืœื›ืชื•ื‘:
JSON.parse(data);
ืขืœ ืคื ื™:
eval('(' + data + ')');
ืœืžืจื•ืช ืฉื’ื ื”ื’ื™ืจืกื” ื”ืฉื ื™ื” ืขื•ื‘ื“ืช, ื›ื™ ื”ื’ื™ืจืกื” ื”ืจืืฉื•ื ื” ืžื”ื™ืจื” ื™ื•ืชืจ ื•ืžืชืžื•ื“ื“ืช ื˜ื•ื‘ ื™ื•ืชืจ ืขื ืžื™ื“ืข ืฉืื™ื ื• JSON. ืžืŸ ื”ืžืคื•ืจืกืžื•ืช ืฉ"ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืžืงื“ื™ืžื” ืืช ื–ืžื ื” ื”ื™ื ืฉื•ืจืฉ ื›ืœ ืจืฉืข", ืื‘ืœ ื–ื” ืœื ืชื™ืจื•ืฅ ืœื›ืชื•ื‘ ืงื•ื“ ื’ืจื•ืข. ืื ืืชื ื™ื›ื•ืœื™ื ื•ื™ืฉ ืœื›ื ืืช ื›ืœ ื”ื ืชื•ื ื™ื, ืชืžื™ื“ ืขื“ื™ืคื” ื”ื’ื™ืจืกื” ื”ื ื›ื•ื ื” ื•ื›ืžื” ืฉื™ื•ืชืจ ืžื•ืงื“ื.

ToCode
1 420
ื‘ืขื‘ื•ื“ื” ืขื ื•ืจืกืœ ืืชื ืžืงื‘ืœื™ื ืžืงื•ื ื—ื™ื ืžื™ ืœื’ืžืจื™ ืœืื—ืกืŸ ื•ืœื”ื’ื™ืฉ ืžืžื ื• ืืช ืคืจื•ื™ืงื˜ ื” flask ืฉืœื›ื, ืื‘ืœ ืœื ืจืง ื–ื” - ืืชื ืžืงื‘ืœื™ื ื”ื–ื“ืžื ื•ืช ืœืขื‘ื•ื“ ืขื ื”ื›ืœื™ื ื”ื›ื™ ืžืคื ืงื™ื ืฉืœ ื”ืชืขืฉื™ื”, ื›ืœื™ื ืฉื™ืžืฉื™ื›ื• ืœืฉืจืช ืืชื›ื ื’ื ื›ืฉื”ืคืจื•ื™ืงื˜ ื™ื’ื“ืœ (ื•ืชืจืฆื• ืœืขื‘ื•ืจ ืœืื—ืช ื”ืชื•ื›ื ื™ื•ืช ื‘ืชืฉืœื•ื ืฉืœื”ื). ื”ื™ื›ื•ืœื•ืช ืœื”ืชืงื™ืŸ ืชืœื•ื™ื•ืช, ืœื”ืขืœื•ืช ื•ืœืจืื•ืช ื›ืœ ื’ื™ืจืกื” ื•ืœืฉืžื•ืจ ืขืœ ื—ื™ื‘ื•ืจ ื‘ื™ืŸ ื” Deployment ืœ git, ื•ื›ืžื•ื‘ืŸ ื”ืžื—ื™ืจ (ื—ื™ื ื ืœื’ืžืจื™) ื”ืŸ ืกื™ื‘ื•ืช ืžืฆื•ื™ื ื•ืช ืœื‘ื—ื™ืจื” ื‘ vercel ื‘ืชื•ืจ ื‘ื™ืช ืœืคืจื•ื™ืงื˜ ื”ืคื™ื™ืชื•ืŸ ื”ื‘ื ืฉืœื›ื.

ToCode
1 420
# ื•ืจืกืœ ืžืฆื™ืขื” ืืช ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ืœื”ืขืœื•ืช ื™ื™ืฉื•ื Flask ืœืขื ืŸ ื•ืจืกืœ (vercel) ืžืคื•ืจืกืžืช ื‘ื–ื›ื•ืช ื”ืคืจื™ื™ืžื•ื•ืจืง next.js, ืื•ืชื” ื™ืฆืจ ืื•ืชื• ื’ื™ื™ืจื•ื ืจืื•ืš ืฉื”ืงื™ื ื’ื ืืช ื•ืจืกืœ. ืื‘ืœ ื—ื•ืฅ ืžืคืจื•ื™ืงื˜ื™ ืจื™ืืงื˜ ืœื•ืจืกืœ ื™ืฉ ืขื•ื“ ืœื ืžืขื˜ ืคื™ืฆ'ืจื™ื ื‘ืฉืจื•ื•ืœ. ื”ื ื—ื•ืœืžื™ื ืœื”ื™ื•ืช ืฉื›ื‘ื” ืžืขืœ AWS ืฉืชืืคืฉืจ ื”ืงืžื” ืงืœื” ื™ื•ืชืจ ืฉืœ ืฉื™ืจื•ืชื™ื ืžื‘ื•ืกืกื™ ืขื ืŸ, ื•ืœืคื—ื•ืช ืœืคื™ ื”ืชืงื ืช ื™ื™ืฉื•ื flask ืขืœ ื”ืชืฉืชื™ื•ืช ืฉืœื”ื - ื”ื ืžืงื™ื™ืžื™ื ื•ื‘ื’ื“ื•ืœ. ื‘ื•ืื• ื ืจืื” ืื™ืš ื–ื” ืขื•ื‘ื“. ## ืžื” ืื ื—ื ื• ื‘ื•ื ื™ื ื‘ืฉื‘ื™ืœ ื”ื“ื•ื’ืžื” ืื ื™ ืืขื‘ื•ื“ ืขืœ ื”ืงื•ื“ ืžื”ืžืื’ืจ: https://github.com/ynonp/flask-demo-on-vercel. ืื’ื‘, ืืช ื”ืกื˜ืืจื˜ืจ ืœืžืื’ืจ ื™ืฆืจืชื™ ื“ืจืš ื”ืžืžืฉืง ื”ื’ืจืคื™ ืฉืœ ื•ืจืกืœ ื‘ืขืžื•ื“ ื™ืฆื™ืจืช ืคืจื•ื™ืงื˜ ื—ื“ืฉ ืฉืœื”ื. ื”ืคืจื•ื™ืงื˜ ืžื•ืจื›ื‘ ืžืชื™ืงื™ื” ื‘ืฉื api ื•ื‘ื” ืงื•ื‘ืฅ index.py ืฉืžื˜ืคืœ ื‘ื›ืœ ื”ื‘ืงืฉื•ืช ื”ื ื›ื ืกื•ืช. ื–ื” ืชื•ื›ื ื•:
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return 'some new text'

@app.route('/about')
def about():
    return 'About'
ื”ืงื•ื‘ืฅ ื”ื•ื ืงื•ื‘ืฅ flask ืจื’ื™ืœ ืœื’ืžืจื™ ื•ืขื•ื“ ืžืขื˜ ื ืจืื” ืื™ืš ืœืขื“ื›ืŸ ืื•ืชื• ื›ื“ื™ ืœื”ื—ื–ื™ืจ JSON ื‘ืžืงื•ื ืžื—ืจื•ื–ื•ืช. ื—ื•ืฅ ืžืžื ื• ื™ืฉ ื‘ืคืจื•ื™ืงื˜ ืงื•ื‘ืฅ ื‘ืฉื requirements.txt ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:
Flask==2.2.2
ืื‘ืœ ื›ืžื•ื‘ืŸ ืฉืืคืฉืจ ืœื”ื•ืกื™ืฃ ืืœื™ื• ืฉื•ืจื•ืช ื›ื“ื™ ืœื”ื•ืกื™ืฃ ืชืœื•ื™ื•ืช ืœืคืจื•ื™ืงื˜, ื•ืงื•ื‘ืฅ ื‘ืฉื vercel.json ืฉืžืชืืจ ืืช ืžื‘ื ื” ื”ืคืจื•ื™ืงื˜ ื‘ืฉื‘ื™ืœ ื” Deployment:
{
  "builds": [
    {
      "src": "api/index.py",
      "use": "@vercel/python"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "api/index.py"
    }
  ]
}
## ื”ืขืœืื” ืœืฉืจืช ื•ืจืกืœ ืžื™ื™ืฆืจื™ื Deployment ื—ื“ืฉ ื‘ืฆื•ืจื” ืื•ื˜ื•ืžื˜ื™ืช ืื—ืจื™ ื›ืœ Push ืœืคืจื•ื™ืงื˜. ื”ื ื’ื ืฉื•ืžืจื™ื ืืช ื›ืœ ื” Deployments ื”ื™ืฉื ื™ื ืฉืœื›ื, ื•ื™ืฉ ืื•ืคืฆื™ื” ื‘ืžืกืš ื”ื”ื’ื“ืจื•ืช ืฉืœ ื”ืคืจื•ื™ืงื˜ ืœื”ื’ื‘ื™ืœ ืืช ื”ื’ื™ืฉื” ืœืื•ืชื Deployments ื ื™ืกื™ื•ื ื™ื™ื. ื‘ืœื—ื™ืฆืช ื›ืคืชื•ืจ ืืชื "ืžืงื“ืžื™ื" Deployment ืžืกื•ื™ื ื›ืš ืฉื™ื”ืคื•ืš ืœ Production Deployment. ื‘ืคืจื•ื™ืงื˜ ื”ื“ื•ื’ืžื” ืฉืœื™ ื™ืฆืจืชื™ ืžืกืคืจ Deployments. ื›ืฉื”ืชื—ืœืชื™ ืœืขื‘ื•ื“ ื™ืฆืจืชื™ Deployment ืจืืฉื•ืŸ ืฉื–ืžื™ืŸ ื‘ืงื™ืฉื•ืจ ื”ื–ื”: https://flask-demo-on-vercel-4k95r1get-ynonp.vercel.app ืื—ืจื™ ื–ื” ืขื“ื›ื ืชื™ ืืช ื”ืงื•ื“ ื•ื™ืฆืจืชื™ Deployment ื ื•ืกืฃ ืฉื–ืžื™ืŸ ื‘ืงื™ืฉื•ืจ ื”ื–ื”: https://flask-demo-on-vercel-ayghas8d3-ynonp.vercel.app ืœื ืžืฉื ื” ื›ืžื” ื’ื™ืจืกืื•ืช ืขื•ื“ ืืžืฉื™ืš ืœื‘ื ื•ืช, ื”ืงื™ืฉื•ืจื™ื ื”ื™ืฉื ื™ื ื™ืžืฉื™ื›ื• ืœืขื‘ื•ื“ ื•ื›ืš ืื ื™ ืชืžื™ื“ ื™ื›ื•ืœ ืœื”ืฉื•ื•ืช ืืช ื”ืคืจื•ื™ืงื˜ ืขื ืื™ืš ืฉืขื‘ื“ ื‘ืขื‘ืจ, ื•ื‘ืขืฆื ืœื›ืœ ืงื•ืžื™ื˜ ื‘ git ื™ืฉ ืœื™ ื’ื Preview Version ืฉืœื• ืฉื ืฉืืจ ืœืชืžื™ื“. ื ืขื“ื›ืŸ ืืช ื”ืคืจื•ื™ืงื˜ ื•ื ื™ืฆื•ืจ ื’ื™ืจืกื” ื—ื“ืฉื” ืฉืžื—ื–ื™ืจื” ืืช ื”ื˜ืงืกื˜ ื‘ืชื•ืจ JSON. ื‘ื’ืœืœ ืฉื–ื” ืคืจื•ื™ืงื˜ flask ืื ื™ ื™ื›ื•ืœ ืœื”ืจื™ืฅ ืื•ืชื• ืžืงื•ืžื™ืช ืขื:
python -m flask --app api.index run
ืขื›ืฉื™ื• ืืคืฉืจ ืœื’ืœื•ืฉ ืœ http://localhost:5000/ ื›ื“ื™ ืœืงื‘ืœ ืืช ื”ื˜ืงืกื˜. ืื ื™ ืžืขื“ื›ืŸ ืืช ื”ืงื•ื“ ื‘ api/index.py ืœืงื•ื“ ื”ื‘ื ืฉื™ื—ื–ื™ืจ ืืช ื”ื˜ืงืกื˜ ื‘ืชื•ืจ JSON:
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return { "text": "Hello WOrld" }

@app.route('/about')
def about():
    return 'About'
ื•ืขื›ืฉื™ื• ื’ืœื™ืฉื” ืžื—ื“ืฉ ืœืขืžื•ื“ ืžื—ื–ื™ืจื” ืืช ื” JSON:
{ text: "Hello WOrld" }
ืื—ืจื™ ื”ืขื“ื›ื•ืŸ ืื ื™ ืจื•ืฆื” ืœื”ืขืœื•ืช ืืช ื”ื’ื™ืจืกื” ื”ื—ื“ืฉื” ืœืฉืจืช - ื•ื–ื” ืžืžืฉ ืคืฉื•ื˜! ืžืคืขื™ืœ:
$ git commit -a -m 'return JSON'
$ git push
ืขื›ืฉื™ื• ื‘ืžืกืš ื”ื ื™ื”ื•ืœ ืฉืœ ื•ืจืกืœ ืื ื™ ืจื•ืื” ื’ื™ืจืกื” ื—ื“ืฉื”, ืื ื™ ืจื•ืื” ืืช ืžื–ื”ื” ื”ืงื•ืžื™ื˜ ื•ื”ื•ื“ืขืช ื”ืงื•ืžื™ื˜ ื•ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื•ืงื™ื‘ืœืชื™ ืงื™ืฉื•ืจ ื—ื“ืฉ ื›ื“ื™ ืœืจืื•ืช ืืช ื”ื’ื™ืจืกื” ื”ื—ื“ืฉื” ืฉืœื™ ื‘ืื•ื•ื™ืจ: https://flask-demo-on-vercel-e6irs1pie-ynonp.vercel.app ื›ืฉื”ื’ื™ืจืกื” ืžื•ื›ื ื” ืื ื™ ื™ื›ื•ืœ ืœื—ื‘ืจ ืื•ืชื” ืœ Production ืฉื•ื‘ ื“ืจืš ืžืกื›ื™ ื”ื ื™ื”ื•ืœ ืฉืœ ื•ืจืกืœ. ืื ื™ ืœื•ื—ืฅ ืขืœ ื›ืคืชื•ืจ Promote To Production ื•ืžืงื‘ืœ ืืช ื” JSON ื‘ื“ื•ืžื™ื™ืŸ ื”ืจืืฉื™ ืฉืœ ื”ืืคืœื™ืงืฆื™ื”, ืื•ืชื• ื’ื ืงื™ื‘ืœืชื™ ืž vercel ื‘ืงื™ืฉื•ืจ https://flask-demo-on-vercel.vercel.app.

ToCode
1 420
# ื”ืคื™ื˜ื•ืจื™ื ื‘ื˜ืง (ืื•: ืžื” ืขื•ืฉื™ื ืขื ื”ื–ืžืŸ ื”ืคื ื•ื™) ืจืง ืœืคื ื™ ื›ืžื” ื—ื•ื“ืฉื™ื ื”ื™ื” ื ื“ืžื” ืฉื”ืขื•ืœื ื”ื•ื ื›ืžื• ื—ื ื•ืช ืžืžืชืงื™ื ืขื ืงื™ืช ื•ืื ื—ื ื• ืจืง ืฆืจื™ื›ื™ื ืœื‘ื—ื•ืจ ืื™ื–ื” ืกื•ื›ืจื™ื” ืœืคืชื•ื— ืงื•ื“ื, ื•ื”ื ื” ื ื”ืคื›ื” ื”ืงืขืจื” ืขืœ ืคื™ื” ื•ื›ื•ืœื ื—ื•ืฉืฉื™ื ืžื”ืฆื™ื•ืฅ ื”ื‘ื ื•ืื™ืคื” ื™ื”ื™ื• ื”ืคื™ื˜ื•ืจื™ื ื”ื‘ืื™ื. ื•ืœืžืจื•ืช ืฉื›ืœ ืื—ื“ ื”ื™ื” ืจื•ืฆื” ืœื—ืฉื•ื‘ ืฉื”ื•ื "ื˜ื•ื‘ ืžื›ื“ื™ ืฉื™ืคื˜ืจื• ืื•ืชื•" ื”ืžืฆื™ืื•ืช ืžืจืื” ืฉืœื ืžืฉื ื” ื›ืžื” ืืชื ื˜ื•ื‘ื™ื, ื—ื‘ืจื” ืฉืกื•ื’ืจืช ืžื•ืฆืจ ืœื ืžืžื”ืจืช ืœื”ืขื‘ื™ืจ ืืช ื”ืื ืฉื™ื ืœืขื‘ื•ื“ ืขืœ ืžื•ืฆืจ ืื—ืจ. ืื– ื‘ื™ืŸ ืื ืืชื ื›ื‘ืจ ื‘ื‘ื™ืช ืžื—ื›ื™ื ืœื™ืžื™ื ื˜ื•ื‘ื™ื ื™ื•ืชืจ ืื• ืขื“ื™ื™ืŸ ืขื•ื‘ื“ื™ื ืื‘ืœ ื—ื•ืฉืฉื™ื, ื”ื ื” ื›ืžื” ื˜ื™ืคื™ื ืฉื™ื›ื•ืœื™ื ืœืขื–ื•ืจ ืœื”ืขื‘ื™ืจ ืืช ื”ื–ืžืŸ ืขื“ ื”ื’ืื•ืช ื”ื‘ืื”- ## ื–ื” ื–ืžื ื™ ื“ื‘ืจ ืจืืฉื•ืŸ ื•ื—ืฉื•ื‘ ืœื–ื›ื•ืจ ื”ื•ื ืฉืขืœื™ื• ื•ื™ืจื™ื“ื•ืช ื›ืืœื” ื”ืŸ ื–ืžื ื™ื•ืช. ื”ื™ื•ื ื›ื•ืœื ืžืžื”ืจื™ื ืœืกื’ื•ืจ ืžื•ืฆืจื™ื ืื‘ืœ ืจืง ืœืคื ื™ ืฉื ื” ื›ื•ืœื ื’ื™ื™ืกื• ื•ื”ื™ื™ืชื ืฆืจื™ื›ื™ื ืœื”ื“ื•ืฃ ื”ืฆืขื•ืช ืฉื›ืจ ืคืกื™ื›ื™ื•ืช. ื›ืžื• ืฉืœื ืฆืจื™ืš ืœื”ืชืจื’ืฉ ื›ืฉืžืฆื™ืขื™ื ืœืš ืžืฉื›ื•ืจืช ื’ื‘ื•ื”ื” ื›ืš ื›ื“ืื™ ืœืงื—ืช ืืช ื”ื“ื‘ืจื™ื ื‘ืคืจื•ืคื•ืจืฆื™ื” ื›ืฉืœื•ืงื—ื™ื ืื•ืชื”. ื™ืžื™ื ื˜ื•ื‘ื™ื ื™ื•ืชืจ ื™ื‘ื•ืื•. ื–ื” ื’ื ื‘ืกื“ืจ ืœืกืคื•ื’ ื™ืจื™ื“ื” ื‘ืฉื›ืจ ืื• ืคื’ื™ืขื” ื‘ืชื ืื™ื. ื›ืฉื”ืฉื›ืจ ื™ื•ืจื“ ื‘ื›ืœ ื”ืชืขืฉื™ื”, ืงืฉื” ืœืฆืคื•ืช ืฉื”ื—ื‘ืจื” ื”ื‘ืื” ื‘ื” ืชืชื—ื™ืœื• ืœืขื‘ื•ื“ ืชืจืฆื” ืœื”ืฆื™ืข ื™ื•ืชืจ ืžืžื” ืฉื”ืฆื™ืขื• ืœื›ื ืœืคื ื™ ืฉื ื”. ื‘ื›ืœ ืžืงืจื” ืขื“ื™ืฃ ืœื”ื™ื•ืช ื‘ืขืฉื™ื” ื•ืื ื™ืฉ ื”ื–ื“ืžื ื•ืช ืœืžืฉืจื” ืžืขื ื™ื™ื ืช (ื’ื ื‘ืฉื›ืจ ื™ื•ืชืจ ื ืžื•ืš) ืื ื™ ื”ื™ื™ืชื™ ืœื•ืงื—. ืžื” ืฉืœื ื›ื“ืื™ ืœืขืฉื•ืช ื–ื” ืœื˜ื—ื•ืŸ ืจืื™ื•ื ื•ืช ืขื‘ื•ื“ื” ื•ืœื—ืคืฉ ืืช ื”ื“ื‘ืจ ื”ื’ื“ื•ืœ ื”ื‘ื. ื‘ืชืงื•ืคื•ืช ื›ืืœื” ื”ืจื‘ื” ื™ื•ืชืจ ืงืฉื” ืœืžืฆื•ื ื•ืœื ืกื‘ื™ืจ ืฉืขื•ื“ ืจืื™ื•ื ื•ืช ื–ื” ืžื” ืฉื—ืกืจ ืœื›ื. ## ื”ืคืจื•ื™ืงื˜ ื”ื”ื•ื ืฉืจืฆื™ืช ืœื›ืชื•ื‘ ืžื” ื›ืŸ ื›ื“ืื™ ืœืขืฉื•ืช ืขื ื”ื–ืžืŸ? ื”ื“ื‘ืจ ื”ื›ื™ ื—ืฉื•ื‘ ื”ื•ื ืœื”ื™ืฉืืจ ื‘ืขืฉื™ื”, ื•ื”ื“ืจืš ื”ื›ื™ ืงืœื” ืœืขืฉื•ืช ืืช ื–ื” ื”ื™ื ืœืงื—ืช ืคืจื•ื™ืงื˜ ืฉืชืžื™ื“ ืจืฆื™ืชื ืœื›ืชื•ื‘ ื•ืœื ื”ื™ื” ืœื›ื ื–ืžืŸ. ื–ื• ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืžืขืจื›ืช ืื™ื ื˜ืจื ื˜ื™ืช ืฉืชืขื–ื•ืจ ืœืขืžื•ืชื” ืื• ืืจื’ื•ืŸ ืฉืงืจื•ื‘ ืœืœื‘ื›ื, ื™ื›ื•ืœ ืœื”ื™ื•ืช ื›ืœื™ ืฉื™ืขื–ื•ืจ ืœื›ื ื‘ืชื—ื‘ื™ื‘ ืื• ืจืขื™ื•ืŸ ืฉื—ืฉื‘ืชื ืขืœื™ื• ื‘ืขื‘ื•ื“ื” ื”ืงื•ื“ืžืช ื•ืืฃ ืคืขื ืœื ื”ื™ื” ืœื›ื ื–ืžืŸ ืœื™ื™ืฉื. ื™ื•ื ืื—ื“ ื”ื›ืกืฃ ื™ื—ื–ื•ืจ ืœืฉื•ืง ื•ืžื™ืฉื”ื• ื™ืฉืืœ ืืชื›ื ื‘ืจืื™ื•ืŸ ืžื” ืขืฉื™ืชื ืขื ื”ื–ืžืŸ ื”ืคื ื•ื™. ืคืจื•ื™ืงื˜ ื˜ื›ื ื•ืœื•ื’ื™ ืฉืžืฉืชืžืฉ ื‘ื›ืœื™ื ืžืชืงื“ืžื™ื (ื‘ืชื•ืš ื”ืชื—ื•ื ื”ืกืคืฆื™ืคื™ ืฉืืชื ืขื•ื‘ื“ื™ื ื‘ื•) ื™ื›ื•ืœ ืœื”ื™ื•ืช ื‘ื“ื™ื•ืง ื”ืกื™ืคื•ืจ ืฉื”ื ื™ื—ืคืฉื•. ## ื”ืงื•ืจืก ื”ื”ื•ื ืฉืจืฆื™ืช ืœืงื—ืช ืชืžื™ื“ ืจืฆื™ืช ืœื”ื™ื›ื ืก ืœืขื•ืœื ื” Front End ื•ืœื ื”ื™ื” ื–ืžืŸ? ืื•ืœื™ ื—ืœืžืช ืขืœ ืคื™ืชื•ื— ื™ื™ืฉื•ืžื™ ื‘ื™ื ื” ืžืœืื›ื•ืชื™ืช ืื‘ืœ ืชืžื™ื“ ืขื–ื‘ืช ืืช ื”ืงื•ืจืก ื”ื”ื•ื ื‘ืงื•ืจืกืจื” ืื—ืจื™ ื”ืฉื‘ื•ืข ื”ืฉื ื™? ื ื•, ืžื™ ืืžืจ ื–ืžืŸ ืคื ื•ื™ ื•ืœื ืงื™ื‘ืœ? ืงื•ืจืกื™ื ืžืงืฆื•ืขื™ื™ื ื”ืคื›ื• ื–ื•ืœื™ื ืžืื•ื“ ืื• ืืคื™ืœื• ื›ืžืขื˜ ื—ื™ื ืžื™ื™ื ื‘ืฉื ื™ื ื”ืื—ืจื•ื ื•ืช. ื›ื‘ืจ ืœื ืฆืจื™ืš ืœื ืกื•ืข ืœืืจื”"ื‘ ืื• ืœื”ื™ื›ื ืก ืœื—ื•ื‘ื•ืช ื›ื“ื™ ืœื”ื™ืจืฉื ืœืื•ื ื™ื‘ืจืกื™ื˜ื”. ื”ืจืฆืื•ืช ืžื•ืงืœื˜ื•ืช ื•ืชืจื’ื•ืœื™ื ื–ืžื™ื ื™ื ืื•ื ืœื™ื™ืŸ ื‘ื›ืœ ื ื•ืฉื, ื•ืืชื ืฆืจื™ื›ื™ื ืจืง ืœืžืฆื•ื ื•ืœืœืžื•ื“. ืขื›ืฉื™ื• ืขื Chat GPT ืืคื™ืœื• ืœื ืฆืจื™ืš ืžื•ืจื” ื•ืืคืฉืจ ืœืชืช ืœื‘ื™ื ื” ืžืœืื›ื•ืชื™ืช ืœืขื ื•ืช ืขืœ ืจื•ื‘ ื”ืฉืืœื•ืช. ## ื”ืขืกืง ื”ืงื˜ืŸ ืฉื”ืชื›ื•ื•ื ืช ืœืคืชื•ื— ืชืงื•ืคื•ืช ืฉืœ ืžืฉื‘ืจ ื”ืŸ ื”ื–ืžืŸ ื”ื›ื™ ื˜ื•ื‘ ืœืคืชื•ื— ืขืกืง ืงื˜ืŸ ื—ื“ืฉ, ืฉื™ื™ืชืŸ ืœื›ื ื”ื›ื ืกื” ืฆื“ื“ื™ืช ื’ื ื‘ื–ืžืŸ ื”ืžืฉื‘ืจ ื•ื’ื ืื—ืจื™ื•. ื›ืžืชื›ื ืชื™ื ื”ื“ื‘ืจื™ื ื”ืžืจื›ื–ื™ื™ื ืฉืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืขืฉื•ืช ื™ื”ื™ื•: 1. ืœื‘ื ื•ืช ืกืคืจื™ื™ืช ืงื•ื“ ืคืชื•ื— ื•ืœืืกื•ืฃ ืชืจื•ืžื•ืช ืžืื ืฉื™ื ืฉืื•ื”ื‘ื™ื ืืช ื”ืกืคืจื™ื” (ื›ืคืชื•ืจื™ ื”"ืงื ื• ืœื™ ืงืคื”" ืื• patreon ืœืžื™ื ื™ื”ื). 2. ืœื‘ื ื•ืช ืžื•ืฆืจ Saas ืฉืชื•ื›ืœื• ืœืžื›ื•ืจ ืืœื™ื• ื’ื™ืฉื” (ื›ืืŸ ื™ืฉ ื›ืžื” ืจืขื™ื•ื ื•ืช) 3. ืœื‘ื ื•ืช ืืคืœื™ืงืฆื™ื™ืช ืžื•ื‘ื™ื™ืœ ื•ืœืžื›ื•ืจ ืื•ืชื” ื“ืจืš ื—ื ื•ื™ื•ืช ื”ืืคืœื™ืงืฆื™ื•ืช (ื›ืืŸ ื™ืฉ ื›ืžื” ืจืขื™ื•ื ื•ืช) ื”ื“ื‘ืจ ื”ื—ืฉื•ื‘ ื›ืžื•ื‘ืŸ ื”ื•ื ืœื ืจืง ื”ืžื•ืฆืจ ืืœื ื‘ื—ื™ืจืช ื”ืฉื•ืง, ื”ื—ื™ื‘ื•ืจ ืœืžื™ ืฉืื•ืœื™ ื™ืจืฆื” ืœืฉืœื ืขืœ ืžื•ืฆืจ ื›ื–ื” ื•ื”ื—ื™ืคื•ืฉ ืื—ืจื™ ื”ืœืงื•ื—ื•ืช ื”ืจืืฉื•ื ื™ื. ื—ื•ื•ื™ื” ื›ื–ืืช ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืžืื•ื“ ืžื•ืขื™ืœื” ื•ืœืชืช ืœื›ื ืคืจืกืคืงื˜ื™ื‘ื” ื˜ื•ื‘ื” ื™ื•ืชืจ ืื™ืชื” ืชื’ื™ืขื• ืœืชืคืงื™ื“ ื”ื‘ื ื›ืฉื”ืขื•ืœื ื™ื—ื–ื•ืจ ืœื’ื™ื™ืก. ืื– ื ื›ื•ืŸ ืืฃ ืื—ื“ ืœื ืื•ื”ื‘ ืœื”ื™ืฉืืจ ื‘ื‘ื™ืช ื›ืœ ื”ื™ื•ื ื•ืœื”ืกืชื›ืœ ื‘ืคื—ื“ ืขืœ ื—ืฉื‘ื•ืŸ ื”ื‘ื ืง ื”ืžืชืจื•ืงืŸ, ืื‘ืœ ืขื ื ื™ืฆื•ืœ ื ื›ื•ืŸ ืฉืœ ื”ื–ืžืŸ ื™ืฉ ืกื™ื›ื•ื™ ืœืฆืืช ืžื—ื•ื–ืงื™ื ื’ื ืžื”ืชืงื•ืคื” ื”ืงืจื•ื‘ื”.

ToCode - Telegram kanali @tocodeil statistikasi va tahlili