uz
Feedback
ToCode

ToCode

Kanalga Telegram鈥檇a o鈥榯ish

讟讬驻讬诐 拽爪专讬诐 诇诪转讻谞转讬诐 诪讗转 讬谞讜谉 驻专拽

Ko'proq ko'rsatish
1 419
Obunachilar
-124 soatlar
-17 kunlar
-130 kunlar
Postlar arxiv
ToCode
1 420
# 讛讬讬转讬 专讜爪讛 诇讛讬讜转 讟讘讞 讘讞讬讬诐 诇讗 砖诪注转讬 注诇 讟讘讞 砖拽诐 讘讘讜拽专 讜讗讜诪专 "讛讬讜诐 讗谞讬 讛讜诇讱 诇谞住讜转 诇讘砖诇 驻住讟讛. 讗谞讬 讗转讞讬诇 - 讗讜诇讬 讝讛 讬讛讬讛 诪讜讻谉 诇讗专讜讞转 爪讛专讬讬诐, 讗讜诇讬 诇讗专讜讞转 注专讘, 讜讗讜诇讬 专拽 诇砖讘讜注 讛讘讗". 讜讙诐 讗讬谉 诪爪讘 讻砖讛驻住讟讛 讻讘专 注诇 讛讗砖 砖讛讟讘讞 讬住转讻诇 注诇讬讛 讘拽讟注 砖诇 "讟讜讘 讝讛 谞专讗讛 砖注讜讚 5 讚拽讜转 讛讬讗 转讛讬讛 诪讜讻谞讛, 讗讘诇 讙诐 讬砖 诪爪讘 砖讝讛 讬讬拽讞 注讜讚 砖注转讬讬诐 讗讜 注讜讚 砖讘讜注讬讬诐, 讗讬 讗驻砖专 诇讚注转". 讻砖讗转讛 诪转讬讬砖讘 诇讛讻讬谉 驻住讟讛 讬砖 诇讜讞 讝诪谞讬诐 讘专讜专 诪讛 讛讜诇讱 诇拽专讜转 诪转讬. 讗转讛 讬讻讜诇 诇驻砖诇 注诐 讛驻住讟讛, 讗讘诇 讗讬谉 诪爪讘 诇讛住转讻诇 注诇 讛住讬专 讜诇讛转诇讘讟 诪讛 讛讚讘专 讛讘讗 砖爪专讬讱 诇注砖讜转. 讜讗谞讞谞讜? 讗讬驻讛. 讘谉 讗讚诐 拽诐 讘讘讜拽专 诇讻转讜讘 驻讬爪'专 诇诪注专讻转, 注讜讘专讜转 砖注转讬讬诐 讜讗讬谉 诇讱 诪讜砖讙 讗诐 讛驻讬爪'专 讛讜诇讱 诇讛讬讜转 诪讜讻谉 注讚 讛爪讛专讬讬诐, 注讚 讛注专讘 讗讜 注讚 砖讘讜注 讛讘讗. 讜讘砖讜诐 砖诇讘 讘转讛诇讬讱 (讗驻讬诇讜 讗讞专讬 砖讛驻讬爪'专 讻讘专 诪讜讻谉 讜注讜讘讚) 讗转讛 诇讗 讬讜讚注 讗诐 注讜讚 砖谞讬讛 诇讗 讬转讙诇讛 讗讬讝讛 讘讗讙 砖讬砖诇讞 讗讜转讱 诇注讜讚 砖讘讜注 注讘讜讚讛. 转住讻讜诇 讘爪讚 - 讞讜住专 讛讬讻讜诇转 诇拽讘讜注 诇讜讞讜转 讝诪谞讬诐 诇注讘讜讚讛 讛讜讗 讞诇拽 诪讜讘谞讛 讘注讘讜讚讛 砖诇 诪转讻谞转讬诐. 讗讜 讻诪讜 砖讗讜诪专讬诐 讗爪诇谞讜 "讝讛 诇讗 讘讗讙, 讝讛 驻讬爪'专". 注讻砖讬讜 讻讚讗讬 砖谞转讞讬诇 诇讛转专讙诇 讜诇讘谞讜转 诇注爪诪谞讜 砖讬讟讜转 注讘讜讚讛 砖诪讞讘拽讜转 讗转 讞讜住专 讛讬讚讬注讛.

ToCode
1 420
# 讬讚注 讞讜爪讛 砖驻讜转 讘讬讟讜讬讬诐 专讙讜诇讗专讬讬诐 讬注讘讚讜 讻诪注讟 讘诇讬 砖讬谞讜讬 讘讻诇 砖驻转 转讻谞讜转 砖转讙讬注讜 讗诇讬讛. 讙诐 讻砖转谞住讜 诇驻转讜讞 拽讜讘抓 讘讻诇 砖驻转 转讻谞讜转 转诪爪讗讜 讗转 注爪诪讻诐 诪注讘讬专讬诐 驻专诪讟专 讘砖诐 Open Mode 砖讬讻讜诇 诇拽讘诇 转诪讬讚 讗转 讗讜转讜 住讟 砖诇 注专讻讬诐. 讛驻拽讜讚讛 strftime 砖诇 Python 诪拽讘诇转 诪讞专讜讝转 砖诪讬讬爪讙转 驻讜专诪讟 转讗专讬讱 讜诪讜专讻讘转 诪讗讞讜讝讬诐 讜讗讜转讬讜转, 讜讝讛讛 诇讙诪专讬 诇讝讜 砖诇 strftime 砖诇 专讜讘讬 讜讙诐 砖诇 C++, perl 讜砖驻讜转 专讘讜转 谞讜住驻讜转. 诪讬 砖讬讜讚注 诇注讘讜讚 注诐 Promises 讘 JavaScript 讬拽诇讜讟 诪讛专 诪讗讜讚 讗讬讱 诇讛砖转诪砖 讘 asyncio 讘 Python 讜讗驻讬诇讜 讘 std::async 砖诇 C++ (诇诪专讜转 砖讘讬谞讬谞讜 砖讜诐 讚讘专 讘 C++ 诇讗 谞拽诇讟 诪讛专 诪讗讜讚). 讗讜转讜 讚讘专 诇讙讘讬 注讘讜讚讛 注诐 REST 讜 GraphQL, 讻转讬讘转 砖讗讬诇转讜转 SQL, 驻讬注谞讜讞 砖诇 拽讘爪讬 XML, 讜讗驻讬诇讜 Multi Threaded Programming. 讛专讘讛 诪讗讜讚 诪讛讬讚注 砖诇谞讜 讬讻讜诇 诇讛讬讜转 讘注诇 注专讱 讘诪注讘专 诇砖驻讛 讞讚砖讛. 讘讛转诇讘讟讜转 讗诐 讻讚讗讬 诇诇诪讜讚 谞讜砖讗 诪住讜讬诐, 讻讚讗讬 诇拽讞转 讘讞砖讘讜谉 讗转 诪住驻专 砖驻讜转 讛转讻谞讜转 砖谞讜砖讗 讝讛 诪讜驻讬注 讘讛谉 讘爪讜专讛 讻讝讜 讗讜 讗讞专转. 讻讻诇 砖谞砖拽讬注 讘讗讬住讜祝 诪讬讜诪谞讜讬讜转 讞讜爪讜转 砖驻讜转 讻讱 讝讛 讛讜诇讱 诇讛砖转诇诐 讜诇讛讞讝讬专 讗转 讛讛砖拽注讛 讘专讜讜讞 讙讚讜诇 讘注转讬讚.

ToCode
1 420
# 讬讜谞讬拽讜讚 讻诇 讛讚专讱 讘 Python2 讗讞讚 讛讚讘专讬诐 砖诪讘诇讘诇讬诐 讘 Python2 讛讜讗 砖诪讞专讜讝讜转 讗讬谞谉 Unicode 讻讘专讬专转 诪讞讚诇. 讛讚讘专 诪讬讬爪专 讛诪讜谉 讟注讜讬讜转 砖诇 诪转讻谞转讬诐 注诐 讛诪讜谉 讛讜讚注讜转 砖讙讬讗讛 砖讜谞讜转 讜诪砖讜谞讜转. 讛谞讛 讻诪讛 讚讜讙诪讗讜转 讜驻讬转专讜谞讜转 砖诇讛谉. ## 讛砖讜讜讗讛 讘讬谉 讬讜谞讬拽讜讚 诇诪讞专讜讝转 讘 Python2 讬砖 砖谞讬 住讜讙讬诐 砖诇 讗讜讘讬拽讟讬诐 诇讬讬爪讜讙 讟拽住讟: 讬砖 讗转 str 砖诪讬讬爪讙 专爪祝 砖诇 讘转讬诐 讜讗转 unicode 砖诪讬讬爪讙 专爪祝 砖诇 讗讜转讬讜转. 讛讛讘讚诇 讘讬谞讬讛谉 讛讜讗 拽专讬讟讬, 讛讗讜专讱 砖诇 讛诪讬诇讛 "砖诇讜诐" 讻诪讞专讜讝转 讘转讬诐 讛讜讗 8, 讗讘诇 讘转讜专 专爪祝 讗讜转讬讜转 讛讜讗 4. 讗讜 讘驻讬讬转讜谉:
>>> len('砖诇讜诐')
8
>>> len(u'砖诇讜诐')
4
讙诐 讛砖讜讜讗讛 讘讬谉 讬讜谞讬拽讜讚 诇诪讞专讜讝转 诇讗 转注讘讜讚 诇讻诐 讻讬 诪讚讜讘专 讘砖谞讬 讗讜讘讬拽讟讬诐 砖讜谞讬诐, 讜讛谞讛 讛谞讬住讬讜谉 注诐 讛讜讚注转 讛砖讙讬讗讛:
>>> '砖诇讜诐' == u'诇砖讜诐'
__main__:1: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
False
讻砖讗转诐 专讜讗讬诐 讗转 讛讛讜讚注讛 诇讻讜 诇讘讚讜拽 诪讛 谞诪爪讗 讘转讜讱 讛诪砖转谞讬诐 砖诇讻诐 讜讞驻砖讜 讗讬讝讛 诪讛诐 讛讜讗 诪讛讟讬驻讜住 讛诇讗 谞讻讜谉. ## 驻讜专诪讟 讘讬谉 讬讜谞讬拽讜讚 诇诪讞专讜讝转 注讜讚 讛讜讚注讛 诪讜讝专讛 诪转拽讘诇转 讻砖诪谞住讬诐 诇讛驻注讬诇 讗转 format 讜诇注专讘讘 讘讬谉 讬讜谞讬拽讜讚 诇诪讞专讜讝讜转 专讙讬诇讜转. 讝讛 谞专讗讛 讻讱:
>>> print('{} / {}'.format(u'讗', u'讘'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u05d0' in position 0: ordinal not in range(128)
讗讜 讘讻讬讜讜谉 讛讛驻讜讱:
>>> print(u'{} / {}'.format('讗', '讘'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 0: ordinal not in range(128)
讘砖谞讬 讛诪拽专讬诐 诪讚讜讘专 讘讗讜转讛 讘注讬讛 - 谞讬住讬谞讜 诇注专讘讘 诪讞专讜讝讜转 str 注诐 unicode, 诪讛 砖驻砖讜讟 诇讗 注讜讘讚. 讛驻讬转专讜谉? 讬讜谞讬拽讜讚 讻诇 讛讚专讱:
>>> print(u'{} / {}'.format(u'讗', u'讘'))
## 讘诇讘讜诇 讘讬谉 encode 诇 decode 讟注讜转 砖诇讬砖讬转 讛讬讗 讘诇讘讜诇 讘讬谉 encode 诇 decode 讘砖讘讬诇 诇讛诪讬专 讘讬谉 str 诇 unicode. 爪专讬讱 诇讝讻讜专 砖讛诪注讘专 诪 unicode 诇 str 谞拽专讗 Encode, 讜讛诪注讘专 讛讛驻讜讱 诪 str 诇 Unicode 谞拽专讗 decode. 讗谞讞谞讜 诪驻注谞讞讬诐 拽诇讟 砖讛讙讬注 诪讘讞讜抓 讜诇讻谉 讛讜讗 讘驻讜专诪讟 str 讻讚讬 诇砖诪讜专 讗讜转讜 讘讝讬讻专讜谉, 讜讗谞讞谞讜 诪拽讜讚讚讬诐 诪讬讚注 诪讛讝讬讻专讜谉 讻讚讬 砖谞讜讻诇 诇讛注讘讬专 讗讜转讜 诇讗讞专讬诐. 诇讻谉 讛拽讜讚 讛讝讛 诇讗 注讜讘讚 讻讬 爪专讬讱 诇驻注谞讞 诪讬讚注 砖诪讙讬注 诪讘讞讜抓 (讜诇讗 诇拽讜讚讚 讗讜转讜):
>>> s = codecs.encode('砖诇讜诐', 'utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 0: ordinal not in range(128)
讜讝讛 诇讗 注讜讘讚 讻讬 爪专讬讱 诇拽讜讚讚 诪讬讚注 诪讛讝讬讻专讜谉 讻讚讬 诇讛讜爪讬讗 讗讜转讜 诇驻讜专诪讟 砖讘讞专转诐 (讜诇讗 诇驻注谞讞 讗讜转讜):
>>> s = codecs.decode(u'砖诇讜诐', 'utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
讜讻讗讬诇讜 砖讝讛 诇讗 诪住驻讬拽 诪讜讝专 爪专讬讱 诇讝讻讜专 砖讛 Exceptions 讛讗诇讛 讛谉 讚讜讜拽讗 讛讚讘专 讛讟讜讘 砖拽讜专讛. 住驻专讬讜转 专讘讜转 讬讞诇讬驻讜 讞诇拽 诪讛讗讜转讬讜转 讘住讬诪谞讬 砖讗诇讛 讘诪拽讜诐 诇讝专讜拽 诇讻诐 Exceptions 讜讗讝 讛专讘讛 讬讜转专 拽砖讛 诇讙诇讜转 讗讬驻讛 讛讟注讜转.

ToCode
1 420
# 讛诪讻砖讜诇 诪讛 砖诪驻专讬讚 讘讬谉 讗谞砖讬诐 砖诪爪诇讬讞讬诐 诇讛专讬诐 驻专讜讬拽讟讬诐 诇讗谞砖讬诐 砖谞转拽注讬诐 讛讜讗 诇讗 讛注讜讘讚讛 砖讛专讗砖讜谞讬诐 讬讜讚注讬诐 诪讛 讛诐 注讜砖讬诐 讜转诪讬讚 讛讻诇 讛讜诇讱 诇讛诐, 讗诇讗 诪讛 讻诇 拽讘讜爪讛 注讜砖讛 讗诇 诪讜诇 讛诪讻砖讜诇. 讛诪讻砖讜诇 讝讛 讛拽讜讚 砖讻转讘转 讘讚讬讜拽 讻诪讜 讘转讬注讜讚 讗讘诇 诪砖讜诐 诪讛 讗爪诇讱 诇讗 注讜讘讚. 讝讛 讛讚讘专 讛诪讜讝专 讛讝讛 砖讗转讛 诪谞住讛 诇注砖讜转 砖诇讗 诪讜驻讬注 讘转讬注讜讚 讜砖谞专讗讛 砖讗祝 讗讞讚 讘讗讬谞讟专谞讟 诇讗 注砖讛 拽讜讚诐. 讝讛 讛讙讬诇讜讬 砖讛住驻专讬讛 砖专爪讬转 诇讘讞讜专 讘讛 讘注爪诐 诇讗 讬讻讜诇讛 诇注砖讜转 讗转 讛讚讘专 讛讝讛 砖专爪讬转. 讝讜 讛讛讘谞讛 砖诪讛 砖谞专讗讛 讻诪讜 讬讜诪讬讬诐 注讘讜讚讛 讛讜诇讱 诇拽讞转 讞讜讚砖 讘诪拽专讛 讛讟讜讘. 讘讻诇 驻专讜讬拽讟 讬砖 诪讻砖讜诇 讜讛专讘讛 驻注诪讬诐 讬砖 讬讜转专 诪讗讞讚. 讛诪讻砖讜诇 讝讗转 讛谞拽讜讚讛 讘讛 讗谞砖讬诐 诪转讬讬讗砖讬诐, 讝讛 讛讞讜讚砖 讛专讗砖讜谉 讘讞讚专 讻讜砖专, 讗讜 讛砖谞讛 讛专讗砖讜谞讛 讘注讘讜讚讛 讻注爪诪讗讬. 讗讘诇 讛诪讻砖讜诇 讛讜讗 讙诐 诪讛 砖讛讜驻讱 讗转 讛讚讘专 砖讗转讛 诪谞住讛 诇讘谞讜转 诇讘注诇 注专讱, 讜讛讜讗 讛住讬讘讛 砖诇讗 讻讜诇诐 注讜砖讬诐 讗转 讛驻专讜讬拽讟 讛讝讛. 讜讛讚专讱 讛讬讞讬讚讛 诇讛转诪讜讚讚 注诐 讛诪讻砖讜诇 讛讬讗 诇讛讙讘讬专 诪讛讬专讜转, 诇讛砖拽讬注 讬讜转专 砖注讜转, 诇讛讬讻谞住 诇注讜讘讬 讛拽讜专讛 讜诇驻转讜专 讗转 讛讘注讬讛 讘讻诇讬诐 砖讗驻讬诇讜 诇讗 讞砖讘转 砖讬砖 诇讱. 讛转讙讘专讜转 注诇 诪讻砖讜诇讬诐 讜讘谞讬讛 诪讜爪诇讞转 砖诇 讛驻专讜讬拽讟讬诐 砖讛转讞诇转诐 讛诐 讛讚讘专讬诐 砖诇讗讜专讱 讝诪谉 讛讜驻讻讬诐 讗转讻诐 诇诪转讻谞转讬诐 讟讜讘讬诐 讬讜转专.

ToCode
1 420
# 讛拽砖专 (context) 讛住讬讘讛 讛诪专讻讝讬转 砖拽砖讛 诇谞讜 诇诇诪讜讚 讜诇讬讬砖诐 讚讘专讬诐 讞讚砖讬诐 谞拽专讗转 "讛拽砖专" 讗讜 讘讗谞讙诇讬转 Context. 讘砖讘讬诇 诇讛讘讬谉 讗转 讝讛 爪专讬讱 诇讛讬讝讻专 专讙注 讗讬讱 讛诪讜讞 砖诇谞讜 注讜讘讚. 讗驻砖专 诇讚诪讬讬谉 讗转 讛诪讜讞 讘转讜专 专砖转 砖诇 讻讘讬砖讬诐 砖诪讞讘专讬诐 讘讬谉 讗转专讬诐 砖讜谞讬诐. 讛讗转专讬诐 讛诐 讛讚讘专讬诐 砖讗谞讞谞讜 讬讜讚注讬诐 诇诪砖诇 讞转讬诪讛 砖诇 驻讜谞拽爪讬讛 诪住讜讬诪转 讘砖驻转 转讻谞讜转 讗讜 讗讬讱 诇讛砖转诪砖 讘驻拽讜讚转 for; 讛讻讘讬砖讬诐 讛诐 讛讛讝讚诪谞讜讬讜转 讛砖讜谞讜转 讘讛谉 讛砖转诪砖谞讜 讘讗讜转讜 驻专讬讟 讬讚注. 讻讻诇 砖讗转专 诪住讜讬诐 诪讞讜讘专 讘讬讜转专 讻讘讬砖讬诐, 讻诇讜诪专 讻讻诇 砖讝讛 诪砖讛讜 砖讗谞讞谞讜 诪砖转诪砖讬诐 讘讜 诇注转讬诐 讬讜转专 拽专讜讘讜转 讘讞讬讬诐 讜讘讬讜转专 讛拽砖专讬诐, 讻讱 谞讝讻讜专 讗转 讝讛 讟讜讘 讬讜转专. 注诐 讛讝诪谉 讻讘讬砖讬诐 砖诇讗 谞讜住注讬诐 讘讛诐 谞诪讞拽讬诐 讜讗转专讬诐 讛讜驻讻讬诐 诇诇讗 谞讙讬砖讬诐 讜讙诐 讛讛讬驻讱 - 讻讻诇 砖讗谞讞谞讜 诪讙讬注讬诐 诇讗讜转诐 讗转专讬诐 讘讚专讻讬诐 讞讚砖讜转 讜谞讜爪专讬诐 讻讘讬砖讬诐 讞讚砖讬诐 讻讱 讛讝讬讻专讜谉 讛讜驻讱 讬讜转专 讞讬. 拽诇 诇专讗讜转 讗转 讛讗谞诇讜讙讬讛 讛讝讗转 讘驻注讜诇讛 讻砖诪谞住讬诐 诇讝讻讜专 讘注诇 驻讛 诪讬诇讛 讗讜 诪砖驻讟. 讗诐 转谞住讜 诇讝讻讜专 讘注诇 驻讛 诪讬诇讛 讘讜讚讚转 讘砖驻讛 讝专讛 转专讗讜 砖讝讛 诪诪砖 拽砖讛 讜讗讞专讬 砖注转讬讬诐 讗转诐 砖讜讻讞讬诐 讗讜转讛. 诪讛 砖诪驻转讬注 砖讚讜讜拽讗 讻砖诪谞住讬诐 诇讝讻讜专 讘注诇 驻讛 诪砖驻讟 讗讜 讗驻讬诇讜 住讬驻讜专 拽爪专, 讛诪讬诇讛 讛专讗砖讜谞讛 讘诪砖驻讟 "诪讝讻讬专讛" 诇谞讜 讗转 讛诪讬诇讬诐 砖讘讗讜转 讗讞专讬讛 讜讻讱 拽诇 诇谞讜 讬讜转专 诇讝讻讜专. 讘讗讜转讜 讛讗讜驻谉 讻砖讬砖 诇讬 专砖转 讻讘讬砖讬诐 讟讜讘讛 住讘讬讘 谞讜砖讗 砖讗谞讬 诇讗 诪讻讬专, 讬讛讬讛 诇讬 诪诪砖 拽诇 诇诇诪讜讚 讗转 讛谞讜砖讗 讛讞讚砖 讛讝讛. 讘讙诇诇 讝讛 诪转讻谞转讬 Java 诪爪诇讬讞讬诐 诇诇诪讜讚 讬讞住讬转 诪讛专 C# - 讛讛转谞讛讙讜转 诪诪讜驻讛 讻诪注讟 讗讞讚 诇讗讞讚 讘讬谉 讛砖驻讜转, 讜讗驻砖专 诇讛砖转诪砖 诪讞讚砖 讘讗讜转讛 专砖转 讻讘讬砖讬诐 讜专拽 诇讛诇讘讬砖 注诇讬讛 注讜讚 讻诪讛 讗转专讬诐. 诇注讜诪转 讝讗转 讛诪注讘专 诪转讻谞讜转 Back End 诇转讻谞讜转 Front End 讛讜讗 讻讘专 讛专讘讛 讬讜转专 诪住讜讘讱. 讛讻诇 讞讚砖 讜爪专讬讱 诇讘谞讜转 专砖转 讻讘讬砖讬诐 讞讚砖讛 住讘讬讘 讗讬谞住驻讜专 诪讜砖讙讬诐 讜专注讬讜谞讜转 讞讚砖讬诐. 讝讛 驻砖讜讟 诇讗 讚讜诪讛 诇砖讜诐 讚讘专 砖讗谞讞谞讜 讻讘专 诪讻讬专讬诐. 诪讛 注讜砖讬诐 注诐 讝讛? 拽诇- 讻讚讗讬 诇讛讘讬谉 砖诇讬诪讜讚 谞讜砖讗 讞讚砖 讻专讜讱 讛专讘讛 驻注诪讬诐 讘讘谞讬讬转 专砖转 讻讘讬砖讬诐 讞讚砖讛 讘诪讜讞, 讜讻讻诇 砖谞讜住讬祝 注讜讚 讛爪讟诇讘讜讬讜转, 驻专讬讟讬 诪讬讚注 讜拽砖专讬诐 讘讬谉 讛讚讘专讬诐 砖讗谞讞谞讜 诇讜诪讚讬诐 讻讱 谞爪诇讬讞 诇讝讻讜专 讗讜转诐 讟讜讘 讬讜转专. 诇讻谉 讻讚讗讬 诪讗讜讚 讙诐 诇拽专讜讗, 讙诐 诇专讗讜转 讛专爪讗讜转 讘讬讜讟讬讜讘, 讙诐 诇讻转讜讘 拽讜讚, 讙诐 诇砖诪讜注 驻讜讚拽住讟, 讙诐 诇讛注转讬拽 拽讜讚 诪讗讞专讬诐 讜诇砖谞讜转 讗讜转讜, 讙诐 诇砖诪讜注 专讻讬诇讜讬讜转 注诇 讛讗谞砖讬诐 诪讗讞讜专讬 讛讟讻谞讜诇讜讙讬讛 讜讗驻讬诇讜 诇讞驻砖 讗转 讛转诪讜谞讜转 砖诇讛诐 讘专砖转. 讻诪讛 砖讗转诐 讬讜讚注讬诐 讬讜转专 诪"讛诪住讘讬讘" 砖诇 讛讟讻谞讜诇讜讙讬讛 讻讱 转讘谞讜 讬讜转专 讞讬讘讜专讬诐 讘诪讜讞 诇专注讬讜谞讜转 讛讞讚砖讬诐 讜转讜讻诇讜 诇讝讻讜专 讗讜转诐 讟讜讘 讬讜转专.

ToCode
1 420
# 专讬讚讗拽住 讛讜拽住 诇驻谞讬 讻诪讛 砖讘讜注讜转 讛住讘专转讬 诇讗谞砖讬诐 讘拽讜专住 React 注诇 Redux 讜注诇 讻诇 讛讚讘专讬诐 讛诪讚诇讬拽讬诐 砖讗驻砖专 诇注砖讜转 讗讬转讛. 讛讛转讞诇讛 讛讬转讛 诪诇讛讬讘讛 讜讻讜诇诐 讗驻讬诇讜 讛爪诇讬讞讜 诇砖专讜讚 讗转 讛住讬驻讜专 注诇 讛 Stores 讜讛驻讜谞拽爪讬讛 reducer. 讜讗讝 讛讙注谞讜 诇讞讘专 讗转 讻诇 讛注住拽 讛讝讛 诇 React 讜讬讻讜诇转讬 诇专讗讜转 拽讘讜爪讛 砖诇诪讛 砖诇 转诇诪讬讚讬诐 诪专讜讻讝讬诐 谞注诇诪转 讜讛讜驻讻转 诇讗讜住祝 砖诇 诪讘讟讬诐 诪讬讜讗砖讬诐. 讜讛讗诪转? 讗谞讬 讚讬 诪讘讬谉 讗讜转诐. 谞谞讬讞 砖讬砖 诇讬 State 砖诇 讗驻诇讬拽爪讬讛 砖谞专讗讛 讻讻讛:
const initialState = {
  home: [
    { id: 1, text: "buy stuff", done: false },
    { id: 2, text: "clean the kitchen", done: false },
    { id: 3, text: "cook dinner", done: true }
  ],
  work: [
    { id: 4, text: "prepare webinar text", done: true },
    { id: 5, text: "write daily post", done: false },
    { id: 6, text: "prepare slides for talk", done: false }
  ],
  hobbies: [{ id: 7, text: "write a cool tetris game", done: false }]
};
讜讗谞讬 专讜爪讛 诇讻转讜讘 拽讜诪驻讜谞谞讟转 专讬讗拽讟 砖转爪讬讙 讗转 讻诇 讛诪砖讬诪讜转 讘拽讘讜爪讛 诪住讜讬诪转, 注讚 诇讗 诪讝诪谉 讛讬讬转讬 爪专讬讱 诇讻转讜讘 拽讜讚 砖谞专讗讛 讻讱:
const TaskGroup = connect((state, ownProps) => ({
  tasks: state[ownProps.group],
  group: ownProps.group
}))(function TaskGroup({ tasks, group }) {
  return (
    <div>
      <h2>{group}</h2>
      <ul>
        {tasks.map(task => (
          <li>{task.text}</li>
        ))}
      </ul>
    </div>
  );
});
讜讗谞讬 讻讜转讘 讗转 讝讛 注诇 讛诇讜讞 讜讘注爪诪讬 诇讗 诪讘讬谉 诇诪讛 讚讘专讬诐 爪专讬讻讬诐 诇讛讬专讗讜转 讻讻讛, 诪讗讬驻讛 讻诇 讛住讜讙专讬讬诐 讛讗诇讛 讜诪讬 讬讜诐 讗讞讚 讬爪讟专讱 诇转讞讝拽 讗转 讛讟讬专讜祝 讛讝讛. 讜谞讬住讬转讬, 讘讗诪转 砖谞讬住讬转讬 - 讛爪注转讬 诇讛诐 诇讛讜爪讬讗 讛讞讜爪讛 讗转 讛驻讜拽谞爪讬讛 mapStateToProps 诇驻讜谞拽爪讬讛 谞驻专讚转 讻诪讜 砖讻讜诇诐 注讜砖讬诐, 讗讜 诇注爪讜诐 注讬谞讬讬诐 讘讝诪谉 砖讻讜转讘讬诐 讗转 讛拽讜讚 讻诪讜 砖讻讜诇诐 注讜砖讬诐, 讗讘诇 讻诇讜诐 诇讗 注讝专. 讜讛谞讛 讘讝诪谉 砖讗谞讬 讻讜转讘 讗转 讛驻讜住讟 讛讝讛 讜诪拽讟专 讬讜砖讘讬诐 讗谞砖讬诐 讘 react-redux 讜注讜砖讬诐 注讘讜讚讛. 注讘讜讚讛 谞驻诇讗讛, 注讘讜讚讛 砖注讜砖讛 讗转 讛注讘讜讚讛 砖诇讬 讛专讘讛 讬讜转专 拽诇讛. 讘拽讬爪讜专 讙诐 讛诐 注讘专讜 诇 React Hooks. 注讻砖讬讜 讗谞讞谞讜 讻讘专 讬讻讜诇讬诐 诇讜讜转专 注诇 connect 讜注诇 讛讞转讬诪讛 讛诪讘讬讻讛 砖诇讜 讜诇讻转讜讘 拽讜讚 砖谞专讗讛 讻讱:
function TaskGroup({ group }) {
  const tasks = useSelector(state => state[group]);

  return (
    <div>
      <h2>{group}</h2>
      <ul>
        {tasks.map(task => (
          <li>{task.text}</li>
        ))}
      </ul>
    </div>
  );
}
讛驻拽讜讚讛 useSelector 诪讜砖讻转 诪讬讚注 诪讛 State 讜诪讞讝讬专讛 讗讜转讜, 讜讞讜住讻转 诇谞讜 讗转 讻诇 讛注讘讜讚讛 讛诪注讬拽讛 注诐 connect. 讜讻谉 讬砖 讙诐 useDispatch 砖诪讞讝讬专讛 讗转 讛驻讜谞拽爪讬讛 dispatch. 驻专讟讬诐 谞讜住驻讬诐 讜讚讜讙诪讗讜转 讘转讬注讜讚 https://react-redux.js.org/api/hooks.

ToCode
1 420
# 驻讬转讜讞 诪砖讞拽 爪讜诇诇讜转 讘 React, TypeScript 讜 MobX. 讞诇拽 2. 讘讞诇拽 讛拽讜讚诐 砖诇 讛诪讚专讬讱 驻讬转讞谞讜 讗转 讛诇讜讙讬拽讛 砖诇 诪砖讞拽 讛爪讜诇诇讜转. 讛讬讜诐 谞讜住讬祝 讗转 讛驻讜谞拽爪讬讛 repr 讜讙诐 诪住驻专 讘讚讬拽讜转 讗讜讟讜诪讟讬讜转 讻讚讬 诇讜讜讚讗 砖讛拽讜讚 砖诇谞讜 诇讗 谞砖讘专. ## 讛驻讜谞拽爪讬讛 repr 讘住讜祝 讛驻讜住讟 讗转诪讜诇 讛爪注转讬 诇讻诐 诇讻转讜讘 讗转 讛驻讜谞拽爪讬讛 BoardSquare.repr 砖诪讞讝讬专讛 诪讛 讬砖 讘诪砖讘爪转. 讝讛 转专讙讬诇 谞讞诪讚 讘驻讬转讜讞 诪讜谞讞讛 注爪诪讬诐 讻讬 讘诪砖讘爪转 讬讻讜诇讬诐 诇讛讬讜转 讻诪讛 住讜讙讬诐 砖诇 讚讘专讬诐, 讜讻诇 讚讘专 讬讻讜诇 诇讛爪讬讙 讗转 注爪诪讜 讘爪讜专讛 拽爪转 讗讞专转. 讘诪拽讜诐 诇砖讬诐 讗转 讻诇 讛诇讜讙讬拽讛 讘诪拽讜诐 讗讞讚 讗谞讬 诪讜住讬祝 驻讜谞拽爪讬讛 讘砖诐 repr 诇讻诇 讗讞讚 诪讛驻专讬讟讬诐 砖讬讻讜诇讬诐 诇讛讬讜转 讘诪砖讘爪转. 讻讱 讛爪讜诇诇转:
abstract class Submarine extends Sea {
    // ...

    repr() {
        if (this.sank) {
            return "X";
        } else {
            return "/";
        }
    }
}
讛讬诐:
class Sea {
    // ...

    repr() {
        return "0";
    }
}
讜讻诪讜讘谉 讛诪砖讘爪转 注爪诪讛:
class BoardSquare {
    // ... 
    repr() {
        if (this.revealed) {
            return this.item.repr();
        } else {
            return " ";
        }
    }
}
讛诪砖讘爪转 讗讞专讗讬转 诇讝讛讜转 讛讗诐 讛讬讗 讻讘专 谞讞砖驻讛, 讗讘诇 讗诐 讻谉 讻诇 驻专讬讟 讗讞专讗讬 诇爪讬讬专 讗转 讛转讜讻谉 砖诇讜 注爪诪讜. 讘爪讜专讛 讻讝讗转 讛拽讜讚 砖诇谞讜 讬转诪讜讚讚 讬驻讛 讙诐 注诐 砖讬谞讜讬讬诐 注转讬讚讬讬诐, 诇诪砖诇 讗诐 谞讜住讬祝 诇诪砖讞拽 讙诐 讚讜诇驻讬谞讬诐 讗讜 讬爪讜专讬诐 讗讞专讬诐. ## 讻转讬讘转 讘讚讬拽讜转 讬讞讬讚讛 讘驻专讜讬拽讟 砖讬爪专谞讜 注诐 create-react-app 讗谞讞谞讜 诪拽讘诇讬诐 讘诪转谞讛 讗转 讛转砖转讬转 诇讻转讬讘讛 讜讛专爪讛 砖诇 讘讚讬拽讜转 讬讞讬讚讛. 讛讜住讬驻讜 讘转讜讱 讛转讬拽讬讛 lib 讜诇讬讚 讛拽讜讘抓 submarines.tsx 讗转 讛拽讜讘抓 submarines.test.tsx 讜讘讜 讛转讜讻谉 讛讘讗:
import { Board, VerticalSubmarine, HorizontalSubmarine } from "./submarines";

test('can hit the sea', () => {
    const b = new Board(10, 10);
    b.bomb([0, 0]);
    expect(b.cellAt([0, 0])?.revealed).toBe(true);
    expect(b.repr()[0]).toBe('0');
});

test('can hit a submarine', () => {
    const b = new Board(10, 10);
    const s = new HorizontalSubmarine(4);
    b.addSubmarine(s, 0, 0);
    b.bomb([0, 0]);
    expect(b.cellAt([0, 0])?.revealed).toBe(true);
    expect(b.repr()[0]).toBe('/');
});

test('can sunk a submarine', () => {
    const b = new Board(10, 10);
    const s = new HorizontalSubmarine(4);
    b.addSubmarine(s, 0, 0);
    b.bomb([0, 0]);
    b.bomb([0, 1]);
    b.bomb([0, 2]);
    b.bomb([0, 3]);
    expect(b.cellAt([0, 0])?.revealed).toBe(true);
    expect((b.cellAt([0, 0])?.item as HorizontalSubmarine).sank).toBe(true);
    expect(b.repr()[0]).toBe('X');
    expect(b.repr()[1]).toBe('X');
});
讛驻拽讜讚讛 test 讗讞专讗讬转 注诇 讛专爪转 转住专讬讟 讘讚讬拽讛. 驻拽讜讚讛 讝讜 诪砖转诪砖转 讘驻拽讜讚讛 谞讜住驻转 讘砖诐 expect 讻讚讬 诇讝讛讜转 砖讚讘专讬诐 诪住讜讬诪讬诐 注讜讘讚讬诐 讻诪讜 砖专爪讬谞讜 (讗讜 诇讗). 诇讚讜讙诪讗 讘讘讚讬拽讛 讛专讗砖讜谞讛 讗谞讞谞讜 讬讜爪专讬诐 诇讜讞, 诪驻爪讬爪讬诐 讗转 讛诪砖讘爪转 讛砖诪讗诇讬转 注诇讬讜谞讛 讜诪拽讜讜讬诐 砖讛讬讗 讗讻谉 诪讝讛讛 砖讛讬讗 讛讜驻爪爪讛. 讛诪讘谞讛 砖诇 expect 讜讗讝 toBe 谞专讗讛 诪讘诇讘诇 讘讛转讞诇讛 讗讘诇 讗讞专讬 砖转转专讙诇讜 转专讗讜 砖讚讜讜拽讗 诪讗讜讚 拽诇 诇拽专讜讗 讗讜转讜. 讗讞专讬 砖转住讬讬诪讜 诇讻转讜讘 讗转 讛讘讚讬拽讜转 转讜讻诇讜 诇讛专讬抓 讗讜转谉 注诐:
$ yarn test
诪转讜讱 砖讜专转 讛驻拽讜讚讛. 讜讻砖转住讬讬诪讜 讛驻专讜讬拽讟 讻谞专讗讛 讬专讗讛 讚讜诪讛 诇讙讬讟讛讗讘 砖诇讬 讘拽讬砖讜专: https://github.com/ynonp/mobx-submarines-demo/tree/bb7ba1e67cf8daaab35c5e6ecfd0337a1c5ab970. ## 转专讙讬诇讬诐 诇讛专讞讘讛 住讬讬诪转诐 诇讻转讜讘 讗转 讛讘讚讬拽讜转 讜讛讻诇 注讜讘讚? 谞砖讗专 诇讻诐 注讜讚 拽爪转 讝诪谉? 讛谞讛 讻诪讛 专注讬讜谞讜转 诇讛专讞讘讛: 1. 诪讛 拽讜专讛 讗诐 谞讬住讬转讬 诇砖讬诐 爪讜诇诇转 诪讞讜抓 诇诇讜讞? 诪讛 拽讜专讛 讗诐 讛爪讜诇诇转 砖诇讬 拽讬讘诇讛 讙讜讚诇 砖诇讬诇讬? 讜诪讛 讗诐 讗谞讬 诪驻爪讬抓 讗转 讗讜转讛 诪砖讘爪转 砖讜讘 讜砖讜讘? 讻转讘讜 讘讚讬拽讜转 诇讻诇 诪拽专讬 讛拽爪讛 砖讗转诐 讬讻讜诇讬诐 诇讚诪讬讬谉 讜转拽谞讜 讗转 讛拽讜讚 讻讱 砖讬转讗讬诐 诇爪讬驻讬讜转 砖诇讻诐. 2. 转砖转讬转 讛讘讚讬拽讜转 砖 create-react-app 讬爪专 讘砖讘讬诇谞讜 谞拽专讗转 jest. 诇讻讜 诇拽专讜讗 拽爪转 注诇 讛驻拽讜讚讛 expect 讘转讬注讜讚 砖诇 jest 讻讚讬 诇拽讘诇 专注讬讜谞讜转 诇讚讘专讬诐 谞讜住驻讬诐 砖转讜讻诇讜 诇讘讚讜拽. 拽讬砖讜专 诇转讬注讜讚: https://jestjs.io/docs/en/expect.

ToCode
1 420
# 讘注讜讚 砖诇讜砖 砖谞讬诐 讘注讜讚 砖诇讜砖 砖谞讬诐 讗转 转讛讬讬 讘注讘讜讚讛 讗讞专转, 注诐 讘讜住 讗讞专转 讜驻专讜讬拽讟 讗讞专转. 注诐 讚讗讙讜转 讞讚砖讜转, 讞讘专讬诐 讞讚砖讬诐 讜讟讻谞讜诇讜讙讬讜转 砖注讚讬讬谉 诇讗 砖诪注转 注诇讬讛谉. 讜讻砖转诇讻讬 诇讛转专讗讬讬谉 诇注讘讜讚讛 讛讞讚砖讛 讛讝讗转 讜讬砖讗诇讜 讗讜转讱 讗诐 讬砖 诇讱 驻专讜讬拽讟 诇讛专讗讜转, 讝讛 诇讗 诪诪砖 讬注讝讜专 诇住驻专 砖注讘讚转 诪诪砖 拽砖讛 讘诪拽讜诐 讛拽讜讚诐 (砖注砖讛 讚讘专讬诐 诪讚诇讬拽讬诐 砖讗讬 讗驻砖专 诇讛专讗讜转), 讗讜 砖注砖讬转 讛诪讜谉 砖注讜转 谞讜住驻讜转. 讻砖诪讚讜讘专 讘拽讜讚 砖注讛 讘讬讜诐 讝讛 诇讗 讛专讘讛, 讗讘诇 讗诐 诪转诪讬讚讬诐 讬讜诐 讗讞专讬 讬讜诐 讗讞专讬 讬讜诐, 讛砖注讛 讘讬讜诐 讛讜驻讻转 诇-7 砖注讜转 讘砖讘讜注, 诇 30 砖注讜转 讘讞讜讚砖 讜诇 365 讬诪讬诐 讘砖谞讛. 讘注讜讚 砖诇讜砖 砖谞讬诐 讛砖注讛 讘讬讜诐 砖诇讱 转转谉 诇讱 驻专讜讬拽讟 讘讛讬拽祝 砖诇 诪注诇 讗诇祝 砖注讜转 驻讬转讜讞. 讝讛 讻讘专 驻专讜讬拽讟 砖讗驻砖专 诇讛专讗讜转 讗讜转讜 讘砖诪讞讛 诇诪注住讬拽 讛讘讗, 讜砖讗讜诇讬 讗驻讬诇讜 讬讻讜诇 诇讛讻谞讬住 拽爪转 讻住祝 诇转拽讜驻讛 砖讘讬谉 讛注讘讜讚讜转.

ToCode
1 420
# 讗讝 讛诇讻转讬 诇注砖讜转 讗转 讛诪讘讞谞讬诐 砖诇 诇讬谞拽讚讗讬谉 讻讚讬 砖讗转诐 诇讗 转爪讟专讻讜 诇讬谞拽讚讗讬谉 讛讜住讬驻讜 诇驻谞讬 谞爪讞 讗转 讛讗讜驻爪讬讛 砖诇 Skills 讻讱 砖讗转诐 讬讻讜诇讬诐 诇爪讬讬谉 讗讬讝讛 诪讬讜诪谞讜讬讜转 讬砖 诇讻诐, 讜讗谞砖讬诐 讗讞专讬诐 讬讻讜诇讬诐 诇住诪谉 砖讗转诐 讘讗诪转 讬讜讚注讬诐 讗转 讛讚讘专讬诐 讛讗诇讛 砖讗转诐 讟讜注谞讬诐 砖讗转诐 讬讜讚注讬诐. 讝讛 讛讬讛 讗诪讜专 诇转转 诪谞讙谞讜谉 驻砖讜讟 讬讜转专 诪讛讛诪诇爪讜转 讛拽诇讗住讬讜转, 讻讬 诇讗祝 讗讞讚 讗讬谉 讻讞 诇讻转讜讘 讛诪诇爪讛 诪住讜讚专转. 讜讝讛 注讘讚. 讘注专讱. 讻讬 讛讬讜诐 诇讻讜诇诐 讬砖 诪诇讗 Skills 讜专讜讘 讛驻注诪讬诐 讗讬谉 砖讜诐 拽砖专 讘讬谉 讛 Skills 砖诇讱 诇讘讬谉 讛讚讘专讬诐 砖讗转讛 注讜砖讛 讘讬讜诐 讬讜诐. 诪住驻讬拽 砖诪讬砖讛讜 驻注诐 讗讞转 讗诪专 诇诇讬谞拽讚讗讬谉 砖讗谞讬 讬讜讚注 转讻谞讜转 诪讜谞讞讛 注爪诪讬诐 讜讝讛 诪讜驻讬注 讗爪诇讬 讘 Skills 诇谞爪讞 谞爪讞讬诐. 讘砖讘讬诇 诇讛转诪讜讚讚 注诐 讝讛 诇讬谞拽讚讗讬谉 讛讜住讬驻讜 (讙诐 讚讬 诪讝诪谉 讗讙讘) 讗讜驻爪讬讛 砖诇 诪讘讞谞讬诐 注诇 Skills. 讛专注讬讜谉 诇砖讬诐 讘诪拽讜诐 讘讜诇讟 讗转 讛 Skills 砖讘讗诪转 讬砖 诇讱, 讘讗诪爪注讜转 诪讘讞谉 砖诇 15 砖讗诇讜转 注诇 讗讜转讜 Skill. 注讘专转 讗转 讛诪讘讞谉? 转拽讘诇 住诪诇 拽讟谉 诪诇讬谞拽讚讗讬谉 讜讻讜诇诐 讬讜讻诇讜 诇专讗讜转 砖讗转讛 讘讗诪转 讬讜讚注 转讻谞讜转 诪讜谞讞讛 注爪诪讬诐 讜诇讗 住转诐 诪拽砖拽砖. 讜讻诪讜 砖住讬驻专转讬 讘讻讜转专转 谞讻谞住转讬 讛讬讜诐 诇注砖讜转 讗转 讛诪讘讞谉 注诇 讙讬讟 讘砖讘讬诇 诇专讗讜转 诪讛 讝讛, 讜讛讗诪转 砖讚讬 谞讛谞讬转讬 讜讛诪砖讻转讬 讙诐 诇诪讘讞谉 注诇 专讬讗拽讟 讜注诇 JavaScript. 讗诐 讗转诐 讗谞砖讬诐 砖讗讜讛讘讬诐 诪讘讞谞讬诐 讗诪专讬拽讗讬诐 诪讘诇讘诇讬诐 讜诇驻注诪讬诐 诇讗 诪讚讜讬拽讬诐 讗讝 讗讜诇讬 讙诐 讗转诐 转讛谞讜 诪讛诐. 讻诪讛 讟讬驻讬诐 讗诐 讘讻诇 讝讗转 转讞诇讬讟讜 诇砖讞拽 注诐 讝讛: 1. 讻讚讗讬 诇注砖讜转 诪讘讞谞讬诐 注诇 Skills 砖诪讜驻讬注讬诐 讗爪诇讻诐 讙讘讜讛 讘驻专讜驻讬诇. 讛爪诇讞讛 讘诪讘讞谉 砖诇 诇讬谞拽讚讗讬谉 谞讞砖讘转 讛专讘讛 驻讞讜转 诪讛诪诇爪讜转 讞讘专讬诐 讜诪转讜讱 讛-3 诪讘讞谞讬诐 砖讗谞讬 注砖讬转讬 专拽 讝讛 砖诇 讛 JavaScript 诪讜爪讙 讘诪拽讜诐 砖讗驻砖专 诇专讗讜转 讗讜转讜. 2. 谞专讗讛 砖讞诇拽 诪讛砖讗诇讜转 谞讻转讘讜 讘讻讜讜谞讛 讘砖讘讬诇 诇讘诇讘诇, 讗讘诇 讬砖 讙诐 砖讗诇讜转 诪诪砖 谞讞诪讚讜转. 讗讬谉 讛诪讜谉 讝诪谉 诇砖讗诇讛 讗讘诇 讻讚讗讬 诇注砖讜转 爪讬诇讜诐 诪住讱 砖诇 砖讗诇讜转 砖诇讗 讬讚注转诐 讻讚讬 砖转讜讻诇讜 讗讞专讬 讝讛 诇注讘讜专 注诇 讛讚讘专讬诐 讜诇专讗讜转 诇诪讛 讛转讻讜讜谞讜. 3. 诇讬谞拽讚讗讬谉 讟讜注谞讬诐 砖诪注讘专 诪讘讞谞讬诐 讻讗诇讛 诪拽驻讬抓 讗讜转讱 讘转讜爪讗讜转 讛讞讬驻讜砖 砖诇 诪讙讬讬住讬诐. 讗谞讬 诇讗 诪讞驻砖 注讘讜讚讛 讗讘诇 讬讛讬讛 诪注谞讬讬谉 诇专讗讜转 讗诐 讘专讗讬讛 拽讚讬诪讛 讛-3 诪讘讞谞讬诐 砖注砖讬转讬 讬注诇讜 讗转 诪住驻专 讛爪驻讬讜转 讘驻专讜驻讬诇 砖诇讬. 讗注讚讻谉 注诇 讝讛. 4. 讜讛讻讬 讞砖讜讘 讘讬谉 讗诐 注讘专转诐 讜讘讬谉 讗诐 诇讗 - 讗讬谉 诪讛 诇拽讞转 诇诇讘. 讛砖讗诇讜转 讛讗诇讛 诇讗 讗讜诪专讜转 讻诇讜诐 诇讙讘讬 讛讬讻讜诇转 讛讟讻谞讬转 砖诇讻诐 诇讛专讬诐 驻专讜讬拽讟 讗讜 诇注砖讜转 注讘讜讚讛 讟讜讘讛 讘讟讻谞讜诇讜讙讬讛 诪住讜讬诪转. 讝讛 驻砖讜讟 讗讜住祝 砖诇 砖讗诇讜转 讟专讬讜讜讬讛 砖讘讜讚拽讜转 讘注讬拽专 讻诪讛 讟讜讘 讗转诐 诪讻讬专讬诐 讗转 讛转讬注讜讚 (讗讜 讻诪讛 诪讛专 讗转诐 讬讜讚注讬诐 诇讞驻砖 讘讙讜讙诇).