Module talk:String

From RimWorld Wiki
Revision as of 16:59, 9 August 2024 by Arcangelus (talk | contribs)
Jump to navigation Jump to search

The wiki supports parser functions like 4 and 1 . Why add this? if there's a reason, should we retrofit existing uses of the parser functions? - Harakoni (Wiki Moderator) (talk) 22:01, 8 August 2024 (UTC)

I probably should have put this on a test page first. The main reason was that earlier testing suggested this to be faster than the parser functions. Because I wanted to be sure, I imported this module to test function by function. Unfortunately, I lack the time to do it in on 1 go. What I have tested since then:
{{#len:string}} is faster than {{#invoke:String|len|target_string}}
{{#pos:string|search term|offset}} is faster than {{#invoke:String|find|source_string|target_string|start_index|plain_flag}}.
String|find always gives #pos:string +1
{{#sub:string|start|length}} is faster than {{#invoke:String|sub|target_string|start_index|end_index}}
The index are of by 1. Again.
{{#count:string|substring}} is faster than {{#invoke:String|count|source_str|pattern_string|plain_flag}}
String|count does accept Ustring patterns, but I'm uncertain of benefit. Misread this. There is no upside here.
{{#invoke:String|join|separator|string1|string2|...}} has no equivalent. Unsure of use case.
{{#replace:string|search term|replacement term}} is faster than {{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
String|replace has additional options.
String|escapePattern seems to have no equivalent. Maybe #urlencode, but that doesn't work here. Limited utility.
String|rep seems to have no equivalent.
String|endswith is maybe equivalent to {{#if:{{#sub:string|start|length}}|yes}}. That would make endswith (marginally) faster.
EDIT: A better fit is #pos within an #if: {{#if:{{#pos:string|search}}|yes}}. That would make it equal and less versatile.
string|match seems to have no equivalent. REGEX is not something I'm good with, so I can't evaluate it right now.
All in all, it seems several parts of thus module have worse performance. The REGEX option may be useful, but I can barely read it. I did not try a scaling test.
--Arcangelus (talk)
Some more testing done.
Removing the following functions due to redundancy:
  • String|len (strictly worse than #len)
  • String|sub (Slower than #sub)
  • String|endswith (Equal to #pos within an #if)
The following overlap with parser functions, but accepts REGEX:
  • String|find (Slower than #pos).
  • String|replace (Slower than #replace).
  • String|count (Slower than #count).
  • Faster than #count if searching for 3+ letters (due to the added #expr required to get the same number)
  • string|match overlaps with #sub, but geared for REGEX more than anything else.
The following have no parser function equivalent:
  • String|escapePattern. May delete for lack of purpose.
  • String|rep. May delete for lack of purpose.
  • String|join. May delete for lack of purpose.
  • String|pos. Unsure. This is the opposite of #pos, so while it may have purpose it can also be confusing.
--Arcangelus (talk) 16:59, 9 August 2024 (UTC)