ToCode
Open in Telegram
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Show more1 420
Subscribers
+124 hours
+17 days
-430 days
Posts Archive
1 420
ืืืืจืื ืืืคืกืืื
ืื ืืฉ ืืืจ ืฉืืืื ืืื ืืฉื ืฉืื ื ืืืชืจ ืืื ืื ืืืืืืช ืืืคืกื, ืื ืฉืืืจื ืืฆืืจื ืืืกืืจืืืช ืืืืงื ืืืืชืจ ืืคืกืืื ืื ืืคืกืืื ืืืชืจ ืืืืืื.
ืืื ืืืืจ ืฉืื ืืืื ืืืืืืช ืืืคืกื ืืจืง ืืขืื ืืช ืกืืื ืืืืืืจ, ืื ืืชืื ืชืื ืขื ืืืื ืืช ืืืืืช ืืฆืืืืื ืืืืฉืื ืืขืืื ืขื ืคืืฆ'ืจ ืฉืืื ืืขืฆื ืืืจ ืฉืืืจ, ืืื ืืืืื ืฉืืงืื ืฉืืืจ ืืชืื ื ืืื ืืืืืืืช ืืฉืื ืืืจ ืืื ืื ืืฆื ืืืกืื ืืื.
ืืฉ ืืืื ืฉืืืืจ ืืื ืืื ืฉืืคืฉืจ ืืขืฉืืช ืืฉืืื ืืคืจืืืงื ืืื git stash. ืื ืกืืืฉ, ืื ืืืฆืืจ ืืืื ืืจืื ืฅ ืฉืขืื ืืืืฉืืื ืืืฉืื ืืืื ืืืฆืืข "ืืืืืืช ืืช ืืคืืฆ'ืจ", ืกืืืฉ ืฉืื ืจืืืื (ืืืืืฆืืช ืืืืืืช ืื ืกืืช git restore, ืืื ืื ืืฃ ืคืขื ืื ืืื ืืืืฅ), ืืฉืื ืืกืคืจืื ืขืืื ืืืฃ ืืื.
ืืงืืืจ ืืช ืืคืืฆ'ืจ, ืืืืฆืื ืืช ืืืืจืกื ืืืืืฉืื ืืืื. ืืกืคืจืื ื ืืื ืืืื ื ืื ื ืืช ืื ืืืืฉ ืืืคืก ืืืจื ืืืจืช.
1 420
ืืืื ืืืืชื: ืขืืืฃ ืืืฉืืืช ืืืคืืกืื ืืคืืืชืื ืขื is
ืืืื ืืจ ืฉื ืคืืืชืื ืืชืจืื ืขืืื ืืืื ืื ืืชืืชื ืงืื ืืื:
if type(x) == int:
...
ืืื, ืื ืขื ืืื ืืืชื ืื ืื ื ืืฉืชืืฉ ื type ืื ื isinstance ืืคืขื ืืืื ืืงืจื ืืืืช ืจืฆืืชื ืืืืืง ืืช ื type. ืื ืฉืืคืจืืข ืื ืืื ืืืืงื ื ==, ืื ืืขืืื ืฉื ืืืื ืืจ ืืฉืืืื ืืื ืืืคืืกืื ืชืขืืื ืืื ืืืชืจ ืขื is, ืืืืืจ ืื ืืงืื ืฉืืืืชื ืฆืจืื ืืืชืื:
if type(x) is int:
...
ืื ืืขืืืื ืขื ืืืคืืกืื ืืืืช ืืฉืืืืืื ืื ืืืชื ืืืจ.
ื ื, ืืืืชื ืืืืืง ืื ืืฉ ืืืื ืืืื ืจืืฆื ืืื ืฉืชื ืืืคืฉืจืืืืช:
In [2]: %timeit type(8) == int
15.6 ns ยฑ 0.091 ns per loop (mean ยฑ std. dev. of 7 runs, 100,000,000 loops each)
In [3]: %timeit type(8) is int
13.4 ns ยฑ 0.0661 ns per loop (mean ยฑ std. dev. of 7 runs, 100,000,000 loops each)
ืืื ืืฉ, ืืื ืื ืื ืงืื ืฉืื ืื ืืืืช ืืฉื ื, ืื ืฉืืืคื ืืช ืืฉืืื ืืขื ืืื ืฉื ืืขื. ืืืืืจ ืืขื ืืขื ืืขื ืจืื ืื ืืชืืืืืื ืขื PEP8 ืื ืื ื ื ืฉืืจืื ืขื is ืืื ืืืฉืืืช ืืืคืืกืื, ืืื ืื ืืฉืืืืืช ื None.
ื .ื. ืืืงืืืืช ืืืชืจ ืืขื ืืื ืื ืืฉืืืื ืขื is ืื == ืืืืื ืืืืืช ืืขืืช ืืฉืืขืืช, ืืืฉื ืืขืืืื ืขื ืจืฉืืืืช:
In [14]: [1, 2, 3] == [1, 2, 3]
Out[14]: True
In [15]: [1, 2, 3] is [1, 2, 3]
Out[15]: False
ืืื ืืืงืจืื ืืืื ืืืจื ืืื ื ืฉืงืืข ืืืชืจ ืืืฉืื ืืืืืจืช ืืืืคืจืืืจ ืื ืืื ืฉืืชืืื ืืื ืฉืืชืืื ืืช ืืืืจื ืืขืฉืืช.1 420
ืจืืคืงืืืจืื ื ืืื ืืืชืจ ื Mock-ืื
ืืืืืื ืืืื ืืื ืืคืืืชืื ืืื ืืงืื ืกืคื ื ืืื ืืื ืฉืคื. ืืงืื ืืื ืืื ืืืืืฉ ืืืฉืืง ื ืืืืฉ ืืกืคืจืื. ื ืืื ืืื ืื ืืชืืืื ืืืืืื ืืื ืืขืืื ืืฉืืื ืืืืืื. ืืืืฉื ืืืจืื ืืกืคืจ ืกืืื, ืืชื ืื ืกื ืื ืืฉ ืืืชื ืืืืืฉื ืขืื ื ื"ืืืื ืืื" ืื "ืงืื ืืื" ืขื ืฉืืืืขืื ืืืกืคืจ ืื ืืื. ืื ืงืื ืฉืขืืื:
def main():
secret_number = random.randint(1, 100)
while True:
next_guess = int(input("Next guess: "))
if next_guess == secret_number:
print("Bravo! You guessed it")
break
elif next_guess < secret_number:
print("Sorry, too small")
else:
print("Sorry, too large")
ืื ืื ืฉืฆืจืื ืืฉืืื ืืืืืง ืืช ืืงืื ืืื ืืืชืื ืืื Mock-ืื, ืืืฉื ืืืจืืก ืืช input ืืืช random.randint ืืื ืืืกืชืื ืื ืืืืคืก. ืืืฉื ืืืืืงื ืืืื ืืืืืืช ืฉืืฉืืฉืชืืฉ ืื ืืฉ ืืช ืืืกืคืจ ืืชืืื ืืช ืชืืคืืก ืืช ืืืืืขื ืื ืืื ื ืืชืฆื ืืืืืืื:
def test_stop_when_guess_is_correct(capsys):
with patch('builtins.input', new=lambda _: "10\n"):
with patch('random.randint') as randint:
randint.return_value = 10
main()
assert capsys.readouterr()[0] == "Bravo! You guessed it\n"
ืื ื ืืื ืงืฆืช ืืืชืจ ืืกืืื ืืฉืจืืฆืื ืืืืื ืืช ืืชืฉืืื ืฉื ืืืฉืืง ืื ืืืืฉ ืืืื ืืื:
def test_says_too_small_when_guessing_small_number(capsys):
with patch('builtins.input') as fake_input:
with patch('random.randint') as randint:
fake_input.side_effect = ["10\n"]
randint.return_value = 30
try:
main()
except StopIteration:
pass
assert capsys.readouterr()[0] == "Sorry, too small\n"
ืืชืืื ืืช ืืืืชืืช ืขื ืืจืื ืืืชืจ ืชืืืืืช ืืขืจืืช ื Mock-ืื ืชืฆื ืืืจ ืืฉืืืื. ืืืืืงืืช ืืืื ืืกืืืืืช ืืืงืฉื ืขื ืจืืคืงืืืจืื ื ืฉื ืืงืื, ืขื ืฉืืืืงืืช ืืชืืืื ืืืืืฉื ืืฆืืจื ืกืคืื ืื ืืช.
ืขืืฉืื ื ื ืกื ืชืจืืื ืืืจ ืืืื ืืืจืื ืืืืฉ ืืช ืืงืื ืืื ืฉืื ื ืฆืืจื Mock-ืื. ืืืืงืืช ืืืืืช ืขืฉืืืืช ืืืืจืืืช ืื:
def test_equal():
assert game.check_user_input(20, "20\n") == game.TEXT['=']
def test_too_large():
assert game.check_user_input(20, "50\n") == game.TEXT['>']
def test_too_small():
assert game.check_user_input(20, "10\n") == game.TEXT['<']
def test_stop_when_equal(capsys):
game.game(50, ["20\n", "40\n", "50\n", "80\n"])
assert capsys.readouterr()[0] == f"""{game.TEXT['<']}
{game.TEXT['<']}
{game.TEXT['=']}
"""
ื ืฉืื ืื ืฉืื ืืืืงื ืืคืขื ืืืืงืช ืืืืืง ืืช ืื ืฉืืื ืฆืจืืื ืืื ืืืื ืืช ืืคืื ืงืฆืื ื Boilerplate ืฉื ืืจืืกืืช. ืืืงืื ืขืฆืื? ืื ื ืืืืจืกื ืืืืฉื ืฉืขืืฉื ืืืืืง ืืช ืืืชื ืืืจ ืืืชืืืื ืืงืื ืืืืืงืืช ืืืืฉ:
from typing import Callable
import random
import itertools
TEXT = {
"=": "Bravo! You guessed it",
"<": "Sorry, too small",
">": "Sorry, too large"
}
MIN = 1
MAX = 100
def check_user_input(secret_number: int, user_value: str) -> str:
if int(user_value) == secret_number:
return TEXT['=']
elif int(user_value) < secret_number:
return TEXT['<']
else:
return TEXT['>']
def input_stream():
while True:
yield input("Next Guess: ")
def secret_number_generator():
return random.randint(MIN, MAX)
def game(secret_number, inputs):
responses = (check_user_input(secret_number, i) for i in inputs)
for response in responses:
print(response)
if response == TEXT['=']:
break
if __name__ == "__main__":
game(secret_number_generator(), input_stream())
ืื ืืื ืื ืงืื ืฉื 41 ืฉืืจืืช ืืืงืื 18. ืืื ื ืืืืจ ืื ืืช ืืืืขืื ืฉืงื ืืืชืจ ืืชืืืง ืงืื ืงืฆืจ ืืืฉืจ ืงืื ืืจืื, ืืืื ื ืืื ืืืืื ืืกืืืืช. ืืืขืื ืฉืืืจื ืฉืืงืื ืขืืืจ ืืืจื ืืกืืื ืืื ืืืจ ืื ื ืืฉื "ืงืฆืจ". ืงืื ืฉื 20,000 ืฉืืจืืช ืขื ืืืืงืืช ืืืืืงื ื ืืื ื ืืคืื ืงืฆืืืช ืืื ืืืชืจ ืงื ืืชืืืืงื ืืืฉืจ ืงืื ืฉื 10,000 ืฉืืจืืช ืืืืืื ืืช.1 420
ืจืืคืงืืืจืื ื ืืื ืืืชืจ ื Mock-ืื
ืืืืืื ืืืื ืืื ืืคืืืชืื ืืื ืืงืื ืกืคื ื ืืื ืืื ืฉืคื. ืืงืื ืืื ืืื ืืืืืฉ ืืืฉืืง ื ืืืืฉ ืืกืคืจืื. ื ืืื ืืื ืื ืืชืืืื ืืืืืื ืืื ืืขืืื ืืฉืืื ืืืืืื. ืืืืฉื ืืืจืื ืืกืคืจ ืกืืื, ืืชื ืื ืกื ืื ืืฉ ืืืชื ืืืืืฉื ืขืื ื ื"ืืืื ืืื" ืื "ืงืื ืืื" ืขื ืฉืืืืขืื ืืืกืคืจ ืื ืืื. ืื ืงืื ืฉืขืืื:
def main():
secret_number = random.randint(1, 100)
while True:
next_guess = int(input("Next guess: "))
if next_guess == secret_number:
print("Bravo! You guessed it")
break
elif next_guess < secret_number:
print("Sorry, too small")
else:
print("Sorry, too large")
ืื ืื ืฉืฆืจืื ืืฉืืื ืืืืืง ืืช ืืงืื ืืื ืืืชืื ืืื Mock-ืื, ืืืฉื ืืืจืืก ืืช input ืืืช random.randint ืืื ืืืกืชืื ืื ืืืืคืก. ืืืฉื ืืืืืงื ืืืื ืืืืืืช ืฉืืฉืืฉืชืืฉ ืื ืืฉ ืืช ืืืกืคืจ ืืชืืื ืืช ืชืืคืืก ืืช ืืืืืขื ืื ืืื ื ืืชืฆื ืืืืืืื:
def test_stop_when_guess_is_correct(capsys):
with patch('builtins.input', new=lambda _: "10\n"):
with patch('random.randint') as randint:
randint.return_value = 10
main()
assert capsys.readouterr()[0] == "Bravo! You guessed it\n"
ืื ื ืืื ืงืฆืช ืืืชืจ ืืกืืื ืืฉืจืืฆืื ืืืืื ืืช ืืชืฉืืื ืฉื ืืืฉืืง ืื ืืืืฉ ืืืื ืืื:
def test_says_too_small_when_guessing_small_number(capsys):
with patch('builtins.input') as fake_input:
with patch('random.randint') as randint:
fake_input.side_effect = ["10\n"]
randint.return_value = 30
try:
main()
except StopIteration:
pass
assert capsys.readouterr()[0] == "Sorry, too small\n"
ืืชืืื ืืช ืืืืชืืช ืขื ืืจืื ืืืชืจ ืชืืืืืช ืืขืจืืช ื Mock-ืื ืชืฆื ืืืจ ืืฉืืืื. ืืืืืงืืช ืืืื ืืกืืืืืช ืืืงืฉื ืขื ืจืืคืงืืืจืื ื ืฉื ืืงืื, ืขื ืฉืืืืงืืช ืืชืืืื ืืืืืฉื ืืฆืืจื ืกืคืื ืื ืืช.
ืขืืฉืื ื ื ืกื ืชืจืืื ืืืจ ืืืื ืืืจืื ืืืืฉ ืืช ืืงืื ืืื ืฉืื ื ืฆืืจื Mock-ืื. ืืืืงืืช ืืืืืช ืขืฉืืืืช ืืืืจืืืช ืื:
def test_equal():
assert game.check_user_input(20, "20\n") == game.TEXT['=']
def test_too_large():
assert game.check_user_input(20, "50\n") == game.TEXT['>']
def test_too_small():
assert game.check_user_input(20, "10\n") == game.TEXT['<']
def test_stop_when_equal(capsys):
game.game(50, ["20\n", "40\n", "50\n", "80\n"])
assert capsys.readouterr()[0] == f"""{game.TEXT['<']}
{game.TEXT['<']}
{game.TEXT['=']}
"""
ื ืฉืื ืื ืฉืื ืืืืงื ืืคืขื ืืืืงืช ืืืืืง ืืช ืื ืฉืืื ืฆืจืืื ืืื ืืืื ืืช ืืคืื ืงืฆืื ื Boilerplate ืฉื ืืจืืกืืช. ืืืงืื ืขืฆืื? ืื ื ืืืืจืกื ืืืืฉื ืฉืขืืฉื ืืืืืง ืืช ืืืชื ืืืจ ืืืชืืืื ืืงืื ืืืืืงืืช ืืืืฉ:
from typing import Callable
import random
import itertools
TEXT = {
"=": "Bravo! You guessed it",
"<": "Sorry, too small",
">": "Sorry, too large"
}
MIN = 1
MAX = 100
def check_user_input(secret_number: int, user_value: str) -> str:
if int(user_value) == secret_number:
return TEXT['=']
elif int(user_value) < secret_number:
return TEXT['<']
else:
return TEXT['>']
def input_stream():
while True:
yield input("Next Guess: ")
def secret_number_generator():
return random.randint(MIN, MAX)
def game(secret_number, inputs):
responses = (check_user_input(secret_number, i) for i in inputs)
for response in responses:
print(response)
if response == TEXT['=']:
break
if __name__ == "__main__":
game(secret_number_generator(), input_stream())
ืื ืืื ืื ืงืื ืฉื 41 ืฉืืจืืช ืืืงืื 18. ืืื ื ืืืืจ ืื ืืช ืืืืขืื ืฉืงื ืืืชืจ ืืชืืืง ืงืื ืงืฆืจ ืืืฉืจ ืงืื ืืจืื, ืืืื ื ืืื ืืืืื ืืกืืืืช. ืืืขืื ืฉืืืจื ืฉืืงืื ืขืืืจ ืืืจื ืืกืืื ืืื ืืืจ ืื ื ืืฉื "ืงืฆืจ". ืงืื ืฉื 20,000 ืฉืืจืืช ืขื ืืืืงืืช ืืืืืงื ื ืืื ื ืืคืื ืงืฆืืืช ืืื ืืืชืจ ืงื ืืชืืืืงื ืืืฉืจ ืงืื ืฉื 10,000 ืฉืืจืืช ืืืืืื ืืช.1 420
ืื ืื ื ื 2024 ืืื ื ืขืืืื ืฆืจืื ืืฉืืืจ ืืช ืืฉืื ืืื ืืฉืืื ืืขืืื ืขื ืืกืคืจืื ืืกืงืืื
ืื ืื ื ืืืื ืฉืืฉ ืืกืคืจืื ืืืืืื ืืืกืคืจืื ืงืื ืื ืืฉืืกืคืจืื ืขื ืืืื ืืกืืื ืงื ืืืืฆื ืืฆืืจื ืืกืืืืช ืืืื ืืืืืื ืืื ืืืืฉื ืฆืจืื ืืืืฆื ืืช ืืืกืคืจืื ืืืจืช. ืืื ืขื ืฉืคืืช ืืื ืคืืืชืื ืืืืืคืกืงืจืืคื ืฉืืืืฉืืช ืืช ืืขืืื ืกืงืืื ืื ืืืืื ืืืืฉืื ืืกืื ืืืชื ืขื ืืืืื ืฉื ืืกืคืจืื.
ืืงืื ืฉื ืืงืืืืจ ืืืื ืืชืืื ืขื ืจืขืืื ืคืฉืื ืฉื ืงืจื Range:
scala> 10.until(20)
val res0: Range = Range 10 until 20
ืขื Range ืืคืฉืจ ืืขืฉืืช ืืืื ืืืจืื ืืืฉื ืืืืืช ืื ืืกืืื:
scala> 10.until(20).sum
val res2: Int = 145
ืขืืฉืื ื ื ืกื ืืช ืืืชื ืืืจ ืขื ืืกืคืจืื ืืืืืื:
scala> 2728902838.until(4728902838)
-- Error: ----------------------------------------------------------------------
1 |2728902838.until(4728902838)
|^^^^^^^^^^
|number too large
-- Error: ----------------------------------------------------------------------
1 |2728902838.until(4728902838)
| ^^^^^^^^^^
| number too large
ื ื ืืจืืจ ืฉืื ืืคืฉืจ ืืืชืื ืืกืคืจ ืืืื ืืชืืจ ืืืืจื, ืื ืื ื ืืืกืืฃ ืื l ืงืื ื ืืื ืฉืืืื Long, ืืื ืืงืื ืืืืขืช ืฉืืืื ืืืจืช:
scala> 2728902838.until(4728902838l)
-- Error: ----------------------------------------------------------------------
1 |2728902838.until(4728902838l)
|^^^^^^^^^^
|number too large
-- [E007] Type Mismatch Error: -------------------------------------------------
1 |2728902838.until(4728902838l)
| ^^^^^^^^^^^
| Found: (4728902838L : Long)
| Required: Int
|
| longer explanation available when compiling with \-explain\
ืืคืขื ืืืืขืช ืืฉืืืื ืืืจ ืจืืืืช ืขื ืืฆืขื ืืื, ืืื ื ืืืคื ืื ืืช ืืืกืคืจ ืืจืืฉืื ื Long ืืฉืืื ืืฉืื ืืช ืกืงืืื:
scala> 2728902838l.until(4728902838l)
val res4: scala.collection.immutable.NumericRange.Exclusive[Long] = NumericRange 2728902838 until 4728902838
ืขืืื? ืื ืืืืืง. ื ืฉืื ืื ืฉืคืงืืืช until ืฉื Int-ืื ืืืืืจื ืืฉืื ืืืืคืืก ืืื ื until ืฉื Long-ืื ืืืืืจื ืืฉืื ืืืืคืืก ืืืจ. ืืืื ืื ืืคืจืืข? ื ืืฉืื ืื ืืกืื ืืื ืขื ืจืฉืืืืช:
scala> val l = List(a, b)
val l:
List[scala.collection.immutable.AbstractSeq[Long | Int] &
IndexedSeq[Long | Int]] = List(NumericRange 2728902838 until 4728902838, Range 10 until 20)
scala> a.start
val res0: Long = 2728902838
scala> l.head.start
-- [E008] Not Found Error: -----------------------------------------------------
1 |l.head.start
|^^^^^^^^^^^^
|value start is not a member of scala.collection.immutable.AbstractSeq[Long | Int] & IndexedSeq[Long | Int] - did you mean scala.collection.immutable.AbstractSeq[Long | Int] & IndexedSeq[Long | Int].last?
1 error found
ืืืจืืช ืฉืื ื a ืืื ื b ืืฉ ืคืื ืงืฆืื start, ืืจืืข ืฉืื ื ืฉื ืืืชื ืืื ืืจืฉืืื ืื ื ืืงืื ืจืฉืืื ืฉื ืืืจืื ืืืชืจ ืืืืืื ืืืื ืืื ืืช ืืคืื ืงืฆืื start, ืืืืืคื ืืืื ืืื ืืืกื ืืจืืฉื ืืื ืฉื ื ืกืืื ืืืืืืื. ืืื ืื ื ืื ืจืื ืืืื ืืืฉืชืืฉ ื Structural Types ืืฉืืื ืืขืงืืฃ ืืช ืืกืืคืืจ ืืื ืืื ืฆืจืื ืืืืืจ ืืืืคื ืืชืืื ื - ืื ืื ืฉืจืฆืืชื ืืื ืืงืื ืคืื ืงืฆืืืช ืืกืืกืืืช ืฉื ืืืื ืขื ืืกืคืจืื ืฉืืขืืื ืืืชื ืืืจ ืืืกืคืจืื ืืืืืื ืืงืื ืื.
ืฉืืจื ืชืืชืื ื ืืืืื ืืื Int ื Long ืืื ืืื ืืขืืืืช (ืฉื Int) ืืื ืจืืืช (ืฉื Long). ืื ืื ื ื 2024 ืืืืืข ืืืื ืฉ Long ืชืืื ืืจืืจืช ืืืืื.1 420
ืขืืืื ืงืฉื
ืืืจ ืฉืืื - ืื ื ืืืฆื ืืจืืฆื ืคืขื ืืฉืืืข ืืืจ ืืื ืืืืฉืื ืืขืืืื ืืจืืฆืืช ืงืฉืืช ืื ืืื ื ืื ืืจืืืฉ ืฉืืคืืจ, ืื ืจืืฆื ืืจืืืฉื ืืื ืืคืขื ืืจืืฉืื ื. ืื ืขืืฉืื?
ืืคื ืืฉ ืจืง ืฉืชื ืชืฉืืืืช ืืคืฉืจืืืช:
1. ืืฉ ืื ืืขืื ืื ืืืช ื ืืืจื ืฉืืืืื ืืชื ืื ืืืื ืืืืื ืก ืืืืฉืจ. ืื ืฉืื ืชืขืฉื ืชืืื ืชืืฉืืจ ืื ืงืืืช ืืืชืืื. ืืื ืืืชืืืฅ ืขืืืฃ ืืืฆืื ืชืืืืืื ืืืจืื.
ืื
2. ืื ืจืื ืฉืจืืฆื ืคืขื ืืฉืืืข ืื ืื ืืกืคืืง ืืฉืืืื ืืฉืืื ืืืืื ืก ืืืืฉืจ. ืืืื ืืื ืฉืื ืืกืืืืื ืื ืขืืื ืืื ืืชื ืฆืจืื ืื ืกืืช ืืจื ืืืจืช, ืืืื ืืจืืฅ 3 ืคืขืืื ืืฉืืืข, ืืืื ืืฉืื ืืืืื ืื ืืกืืืื ืืืจืื, ืืืื ืืฉื ืืช ืชืืื ื. ืฉืืื ืืืชืืื ืืืืืฉืื ืื ืกืืช ืขื ืฉืชืืฆื ืืช ืืืจื ืืืชืงืื.
ืขืืฉืื ืจืง ืฆืจืื ืืืืื ืืื ืจืื ืืืื ืื ืื ื ืืชื ืืืื ืืืืื ืืืคืฉืจืืช ืืจืืฉืื ื ืืื ืืืืชืจ ืืืืื ืืช.
1 420
ืขื ืฉืื ืฆืจืื
ืืืฉืคื ืืื ืืืกืืคืืจ ืขื ืื ืืกืง ืชืคืก ืืช ืชืฉืืืช ืืื:
Eventually, they looked to Bloom Filters, further combined with Count-Min Sketch data structures, which together offered an effective way of supporting multi-field filter queries.
ืืืืื ืื ืืกืง ืขืืื ืืช ืืื ืื ืืืื ืืฉืืื ืืฉืืืจ ืืช ืืืืืื ืฉืืื ืืงืืฆืื ืขื S3. ืืฉืืื ืืืขืช ืืืื ืืืืขืช ืืื ื ืืฆืืช ืืืืื ืงืืืฅ ืื ืืฆืจื ืืืื ืืืกืืก ื ืชืื ืื ืฉืืืืืงื ืืื ืงืืืฅ ืืืชื ืขื ืืชื ืืืืขืืช ืืืื ืฉืื. ืืื ืืืืขื ืืจืืฉื ืืืฉื ืืืืงืื ืฉืจืฆื ืืงืื ืกืื ืื ืฉื ืืืืืื ืืคื ืคืจืืืจืื ืฉืืื ื ืืื, ืืืฉื ืืงืื ืืช ืื ืืืืขืืช ืืืื ืฉืงืฉืืจืืช ืืืฉืชืืฉ ืขื ืืืื ืืกืืื. ืขืืฉืื ืื ื ืืืืข ืื ืืชื ืืืฉืืื - ืคืฉืื ืฉืืฉืืจื ืื ืืื ืืงืก ืขื ืืืื ืืฉืชืืฉ ืืืืื ืืืืช ืฉืืื, ืืื ืื ืื ืจืืืื ืื ืืืจืืฉื ืืืชื ืืืคืฉืจ ืกืื ืื ืืืืฉ ืืคื ืื ืืื ื ืฉืืืช ืื ืืกืคืจ ืฉืืืช ืืื.
ืืืื ืื ืื ื ืืืืขืื ืืืฉืคื ืฉืืืืงืชื. 99% ืืืื ืฉืื, ืืฉืชื ืกื ืืืกืืืจ ืืื ืื ืื ืคืืืืจ ืืืื ืืจืืื ืืฉืืขืืจ ืืืืฉืื ืฉืื ืื ืืฉืื ืืืืื. ืืื ื ืืื, ืืืืช ืจืื ืืืื ืื ืฆืจืื ืคืืืืจ ืืืื, ืขื ืฉืื ืฆืจืื. ืืื ื ืืืื ืจืง ืืืืืื ืืช ืืืขืจืื ืฉืงืืืื ืืืชื ืืชืื ืชืช ืื ืืชืื ืช ืฉืืฆืืขื ืืช ืืจืขืืื ื Zendesk.
ืืืื ืืืืืช ืฉืืขืชืื ืืื ืืื ื ืืืืืืชืืช ืืืื ืืกืคืืง ืืืืื ืืื ืืืฆืืข ืคืืชืจืื ืืช ืืืืืงืื ืืืขืืืช ืืืื. ืื ืขืื ืื ืื ืืืฆื ืืจื ืืืื ืืืชืงืื ืืชืืจ ืืชืื ืชืื ืืื ืืืืืจ ืืืชืจ ืืขืืืช ืืืื ืืงืืช ืืคืชืืจ ืืืชื. ืืื ื ื ืชืื ืื ืืืืืื ืืืืืช ืืฉืขืืืื ืืื ืจืืืื ืืื, ืขื ืฉืืื ืืื ืื ืฆืจืื ืืืชื.1 420
ืืจืืฉืืช ืืฉืจื ืืืืฉืืช
ืื ื ืืืคืฉ ืขืืฉืื ืืชืื ืช/ืช ืฉืืขืืจื ืื ืืคืืชืื ืืืืืฉ ืืื ืขื ื ืืกืืื ืืจืืืืก (ืืชื ืืืื? ืืืืจืื ืืืื? ืื ืื ืืืจื ืืืชื). ืืื ืืงืจื ืฉืืชื ืืืืขื ืืืื ืงืืืื ืืืฆืคืื ืืคืฉืจ ืืืืง ืืช ืืชืืืืืช ืฉืืืืขื ืืฉืืืฉื ืกืืืื - ืืื ืฉืืชืืืืื ืืื ืืชืคืงืื, ืืื ืฉืืืฉ ืื ืงืฉืืจืื, ืืืื ืฉืืืืื ืืฉ ืืชืืื ืืื ืืฉืื ืืกืจ ืืคืจืืคืื ืฉืืื. ืคื ืื ื ืจืืฆื ืืืืจ ืขื ืืงืืืฆื ืืฉืืืฉืืช.
ืืฉืืฉ ืืฉืจื ืฉืื ืื ื ืจืืฆืื ืื ืื ื ืคืืฅ ืฉืืจืืฉืืช ืืืฉืจื ืื ืชืืืืืช 100% ืืช ืืืืฉืืจืื ืฉืื ื. ืืืื ืื ืืืคืฉืื ื ืืกืืื ืืืกืืก ื ืชืื ืื ืฉื ืืืืงืจืืกืืคื ืืื ื ืืืืจ ืคืืกืืืจืก. ืืืื ืืคืจืืืงื ืจืืืงื ืฉืืื ืขืืืืื ืขื Recoil ืืื ืืฉ ื ืืกืืื ืจืง ืืจืืืืงืก. ืืืื ืืืจืฉืื ื ืืกืืื ืืจืืืืก 6 ืืื ื ืขืืืชื ืขื ืจืืืืก ืจืง ืขื ืืืจืกื 4. ืืื ืื ืชืืืืืืืช ืฉืื ืื ืงืจืืืืืช, ืืื ืื ืฆืจืื ืืืชืืืืก ืืืืื ืืฉืื ืื ื ืืืืฉืื ืืืขืืืืช ืืื ืืขืืืจ ืืงืืืฆืช ื"ืืืื" ืืงืืืฆืช ื"ืืชืืื ืืืื".
ืืื ืืืืจืื ืฉืืืืชื ืขืืฉื ืืคื ืกืืจ ืืฉืืืืช (ืืืื ืืืืชืจ ืืืขืื):
1. (ืืื ืืื) - ืฆืจืคื ืืืงืฉื ืฉืืื ืคืจืืืงื ืฆื ืฉืขืฉืืชื ืฉืืชืืื ืืืื ืืืืืื ืื ืืืืืกืื (ืืื ืืื ืคืจืืืงื ืฆื ืืื? ืืืื ืื ืืื ืืื ืืื ืืช ืืืชื). ืืฉืืคืฉืจ ืืจืืืช ืงืื ืืจืื ืคืืืช ืืฉืื ืืกืคืืจ ืฉื ืืช ื ืืกืืื.
2. ืฆืจืคื ืืืงืฉื ืืืชื ืืืืื (ืื ืกืชื ืืืืขื ืืืืืืื) ืฉืืกืืืจ ืฉืืชื ืืืืขืื ืืคืขืจ ืืชืกืืืจื ืื ืืชื ืืชืื ื ืื ืืขืฉืืช ืืื ืืกืืืจ ืืืชื. ืื ืืคืฉืจ ืฆืจืคื ืคืจืืืงื ืืืื ืืืืืื ืฉืืื ืื ืืืืืง ืื ืฉืืืคืฉืื ืืื ืขืืืื ืงืจืืื.
3. ืฆืจืคื ืืืงืฉื ืืืชื ืืืืื ืฉืืกืืืจ ืืื ืืืขืชืื ืืคืขืจ ืืื ืืืืืื ืืืืช ืฉืืื ืืืจืืฉืืช ืืชืคืงืื ืืขืฆื ืื ืืื ืืืื.
ืืื ืืฉืื ืืืกืชืื ืขื ืืืืืืกืื ืืชืืจ ืื ืฉืื ืฉืืืืช ืจืืฆืื ืืชืช ืืื ืฆ'ืื ืก. ืืืงืจืื ืฉืืฉ ืืชืืื ืฉืื ืืกืคืืง ืืจืืจื ืืงืืจืืช ืืืืื, ืชื ื ืืืืืืกืื ืืช ืืืืืข ืฉืื ืฆืจืืืื ืืื ืืืฉืจ ืขื ืืคืขืจ.
1 420
ืืืค ืจืฉืชืืช - ืืงืฉืืืื ืืคืืจื 0
ืื ืืชื ืขืืฉืื ืืฉืืชื ืฆืจืืืื ืืืขืืืช ืฉืจืช ืืืืืงืืช ืืื ืื ืืืืขืื ืืืืื ืคืืจื ืืืืืจ? ืืืงืื ืืืกืชืื ืืืืคืฉ ืชื ื ืืืขืจืืช ืืืคืขืื ืืืืืื. ืคืืจื 0 ืืื ืื ืคืืจื ืืืงื ืืชืงืฉืืจืช TCP, ืืืื ืืฉืื ืื ื ืืืงืฉืื ืืืงืื ืืืงืฉืื ืืคืืจื 0 ืื ืื ื ืฉืืืืื ืืืชื ืืืงืฉ ืืืืฉืื ืคืืจื ืคื ืื ืืืขืจืืช ืืืคืขืื. ืืื ื ืคืื ืืืืืงืืช.
ืฉืืื ืื ืืงืื ืืื ื node.js ืฉืืขืื ืฉืจืช echo, ืื ืกื ืืืชืื ืืืื ืืืืืื ืฉืงืืื ืืืืจื ืืช ืืชืฉืืื ืื ืืื ื:
const net = require('node:net');
const assert = require('node:assert');
async function main() {
var server = net.createServer(function(socket) {
socket.pipe(socket);
});
server.listen(0, '127.0.0.1');
await new Promise((resolve, _reject) => server.on('listening', resolve));
const clientSocket = net.createConnection(server.address().port);
await new Promise((resolve, _reject) => clientSocket.on('connect', resolve));
clientSocket.on('data', (data) => {
const dataWritten = Buffer.from('hello world\n', 'utf8');
const dataRead = data;
assert(dataRead.equals(dataWritten));
clientSocket.end();
server.close();
});
clientSocket.write("hello world\n");
}
main();
ืืชืืื ืืช ืคืืชืืช ืฉืจืช ืขื ืืืืฉื ืืืงืืื, ืืชืืืจืช ืืืื, ืฉืืืืช ืืืืขืช ืืงืกื ืืืืืืืช ืฉืงืืืื ืืืืจื ืืืืืง ืืช ืืืชื ืืืืขื. ืื ืฉืืขื ืืื ืืื ืืื ืฉืืจืช ื listen:
server.listen(0, '127.0.0.1');
ืืืงืื ืืืชืืืื ืขื ืคืืจื ืื ื ื ืืชื ืืืืฉื ืืืืืจ, ืืืืจ ืื ืืฉืืื ืืืชืืืจ ืืืื ืื ื ืจืง ืฆืจืื ืืืกืชืื ื server ืืืจืืืช ืื ืืคืืจื ืฉื ืืืจ.1 420
ืืื ื ืืื ืืื (ืื: ืขื ืืืฉืืืืช ืฉื ืืืืงืืช ืืฉืืฉื ืื ืงืื)
ื ืชืืื ื ืืงืื ืืื ื node.js:
import net from 'node:net';
const host = "localhost";
const port = 1234;
const socket = net.createConnection(port, host, () => {
socket.write("hello\n");
socket.end();
});
socket.on('error', () => {
console.log(\Error connecting to ${host}:${port}\);
});
ืืงืื ืื ืกื ืืืชืืืจ ืืคืืจื 1234 ืขื ืืืืื ื ืืืงืืืืช, ืืฉืืื ืืืืขื hello ืืื ืืกืืืจ ืืช ืืืืืืจ. ืื ืืฉ ืื ืืืฉืื ืฉืืงืฉืื ืขื ืืคืืจื ืืื ืืขืืื, ืืื ืืฃ ืืื ืื ืืงืฉืื ื ืืืข ืืืืจืืข error ืืืืืขืช ืืฉืืืื ืชืืืคืก ืขื ืืืกื. ืขื ืคื ืืื ืืื.
ืขืืฉืื ื ืืืืื ืืจืืฉื ืืืฉื ืืืขืจืืช - ืืฉ ืืืคืฉืจ ืืงืืืข ืืช ืืคืืจื ืืืืืฅ ืืืืฆืขืืช ืืฉืชื ื ืกืืืื. ืื ืื ืืืืืจ ืขืจื ืืืฉืชื ื ืืกืืืื ื ืฉืชืืฉ ืขืืืื ื 1234 ืืชืืจ ืืจืืจืช ืืืื. ืืงืื ืืืขืืืื ืขืฉืื ืืืืจืืืช ืื:
import net from 'node:net';
const host = "localhost";
const port = Number(process.env["PORT"]) || 1234;
const socket = net.createConnection(port, host, () => {
socket.write("hello\n");
socket.end();
});
socket.on('error', () => {
console.log(\Error connecting to ${host}:${port}\);
});
ื ืจืื ืืื? ืชืืฉืื ืฉืื. ื JavaScript ืืคืื ืงืฆืื Number ืืืืืจื ืืกืคืจ, ืืื ืืกืคืจ ืืืื ืืืืืช ืืืื ืืืื ืื ืืืื ืงืื ืื ืืคืืื ืืื ืฉืืืื ื ืงืืื ืขืฉืจืื ืืช. ืืื ืืฉืื ืื ืืืคืฉืจื ื ืืืขืจืืช ืืงืื ืืกืคืจื ืคืืจื ืื ืชืงื ืืื, ืื ืฉืืืจืื ื createConnection ืืืืืฉื ืืคื ื ืฉืืืืข ืืืืจืืข error. ืื ื ืจืื ืืื:
$ node demo.mjs
Error connecting to localhost:1234
$ PORT=8080 node demo.mjs
Error connecting to localhost:8080
$ PORT=abc node demo.mjs
Error connecting to localhost:1234
$ PORT=-1 node demo.mjs
node:internal/errors:496
ErrorCaptureStackTrace(err);
^
RangeError [ERR_SOCKET_BAD_PORT]: Port should be >= 0 and < 65536. Received type number (-1).
at new NodeError (node:internal/errors:405:5)
at validatePort (node:internal/validators:409:11)
at lookupAndConnect (node:net:1289:5)
at Socket.connect (node:net:1246:5)
at Object.connect (node:net:236:17)
at file:///Users/ynonp/tmp/blog/nodebug/demo.mjs:6:20
at ModuleJob.run (node:internal/modules/esm/module_job:217:25)
at async ModuleLoader.import (node:internal/modules/esm/loader:308:24)
at async loadESM (node:internal/process/esm_loader:42:7)
at async handleMainPromise (node:internal/modules/run_main:66:12) {
code: 'ERR_SOCKET_BAD_PORT'
}
ืืฉืืืฉ ืืืืืืืืช ืืจืืฉืื ืืช ืืฉืืื ืคืืจื ืื ืืฉืืคืืจื ืืืื ืขืจื ืฉืืื ื ืืกืคืจ ืืื ืืกืืจ ืืื ืื ื ื ืฉืืจืื ืขื ื ืืกืืื ืืชืืืจืืช ืืื ืื ืืกื ืืืืจืืข ืืฉืืืื. ืืืืืื ืืืืจืื ื ืืฆืจื ืืฆื ืืืฉ ืฉืืืจื ืืืกืืืื ืืงืื ืฉืืฆืจื ื ืืืืจืง ืฉืืืื ืฉืื ืืืคืื ื ืื.
ืืจืื ืคืขืืื ืื ืื ื ืืืืจืื ืืืืืงืืช ืขื Code Coverage ืืชืืจ ืืื ืฉืขืืืจ ืื ื ืืืืื ืื ืืืงื ื ืืื ืฉืฆืจืื ืืช ืืืขืจืืช. ืืืกืื ืงืื ืืื ืืืืจ ืฉืื ืื ืชืืืื ื ืืืงื. ืืื ืืืชืจ ื ืืื ืืืกืชืื ืขื "ืืืกืื ืงืื", ืืืืืจ ืืื ืืืืืงืืช ืฉืื ื ืืืกื ืืกืคืืง ืงืืืื ืฉืื ืื ืฉืืืืฆืืื ืืช ืืืกืชืขืคืืืืช ืืืืื ื ืืืข. ืืจื ืืืช ืืืืฆืื ืงืืืื ืืืืื ืืืืืงื ืืื ืืืืขืืจ ื Chat GPT. ืืื ืืืืคืฆืืืช ืฉืืื ื ืชื ืืฉืืืงืฉืชื ืืื ื ืขืจืืื ืืคืฉืจืืื ืืืฉืชื ื PORT ืืชืืื ืืช ืืื ืืืืืง ืฉืืื ืขืืื:
* Test with default port *
PORT=1234 node your_program.js
* Test with common ports *
PORT=80 node your_program.js
PORT=443 node your_program.js
* Test with invalid port numbers *
PORT=-1 node your_program.js
PORT=abc node your_program.js
* Test with a port already in use *
* (Make sure another program is already using the specified port) *
PORT=8080 node your_program.js
* Test with a custom port using environment variable *
PORT=5678 node your_program.js
Available now! Telegram Research 2025 โ the year's key insights 
