Митко качи първо решение на 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-клаузи.