Митко качи първо решение на 02.12.2019 23:53 (преди почти 6 години)
Добро решение. Има какво да се съкрати -- може да прегледаш останалите домашни за идеи.
Compiling solution v0.1.0 (/tmp/d20200111-2173579-1kdz4ae/solution)
Finished test [unoptimized + debuginfo] target(s) in 3.81s
Running target/debug/deps/solution-a73e64ec87929bd0
running 1 test
test tests::it_works ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Running target/debug/deps/solution_test-38971695424b36d5
running 15 tests
test solution_test::test_construct_packet_from_unicode ... ok
test solution_test::test_construct_packet_no_remainder ... ok
test solution_test::test_construct_packet_with_remainder ... ok
test solution_test::test_construct_packet_with_remainder_cyrillic ... ok
test solution_test::test_consuming_packets ... ok
test solution_test::test_deserialize_invalid_packet ... ok
test solution_test::test_deserialize_packet ... ok
test solution_test::test_deserialize_unicode_packet ... ok
test solution_test::test_full_roundtrip ... ok
test solution_test::test_full_roundtrip_for_zero_size_string ... ok
test solution_test::test_invalid_packet_combination ... ok
test solution_test::test_iterating_packets ... ok
test solution_test::test_iterating_packets_for_zero_size_string ... ok
test solution_test::test_serialize_packet ... ok
test solution_test::test_zero_size ... ok
test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Doc-tests solution
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Добро решение. Има какво да се съкрати -- може да прегледаш останалите домашни за идеи.
На практика, тук не е нужно да имаш if-клауза. Стига останалата логика да ти е вярна, тук директно можеш да върнеш
&source[min..]-- тъй катоminвинаги ще е по-малко или равно на размера на slice-а.Разделянето на байтове е добре имплементирано, но можеше да използваш вградената функция
.to_be_bytes(). Така съдържанието на тази функция може да е простоself.checksum.to_be_bytes().to_vec(). (И всъщност, предвид че по-долу използвашextend_from_slice, вероятно можеше просто да сложиш долуself.checksum.to_be_bytes().)Досадното на вложените if-клаузи е, че else-овете са далеч от логиката, която ги причинява. Според мен това би било по-четимо:
По този начин намаляваш nesting-а и нямаш 13 реда между проверката и грешката. Същото се отнася и за останалите проверки -- често е по-удачно да провериш за проблем и веднага да излезеш, вместо да влагаш if-клаузи.